有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法。
解:这道题我的初始思路走法必定有111...,还有一种就是里面还有二的序列,这是一个排列组合问题。可是太暴力了,时间复杂度是指数倍。
看了一下题解就是要用动态规划来求解。
进阶1:
我们走的最后一步,有几种可能。就是两种,一种是走一步,一种是走两步。拿我们走到十台阶的可能数就可以分为两类F(8)和F(9)。那么我们F(10)=F(9)+F(8),
边界时F(1)=0,F(2)=1
进阶2:
同理F(9)=F(8)+F(7)............. 状态转移方程就是F(n)=F(n-2)+F(n-1)
进阶3
方程求解,第一是想到递归。可是递归的时间复杂度太大,
复杂度是二叉树,树每层有2的n-1次方个节点,总共的节点就是Sn=1+2^1+2^2.......+2^(n-1),2Sn=2^1+2^2.......+2^n,错位相肖法的Sn=2^n-1,时间复杂度就是O(2^N).
进阶4:
二叉树里面有一些重复的元素,也就是重复计算的元素,所以我们可以创建一个哈希表,把不同参数的结果存入哈希表,遇到相同参数就从哈希表里面取出,不相同就继续计算。这种方法叫备忘录算法
将它实现一下就是
public class Main {static int getLevelNumber(int n,HashMap<Integer,Integer> map) {if (n <= 1) {return 0;}if (n == 2) {return 1;}if (n == 3) {return 2;}if (map.containsValue(n)){
return map.get(n); }
else{ int value=getLevelNumber(n-1,map)+getLevelNumber(n-2,map);
map.put(n,value); return value; } }public static void main(String[] args){ Scanner sc = new Scanner(System.in); int b = sc.nextInt();
int a[] = new int[b];
for (int i = 0; i < b; i++) { a[i] = sc.nextInt(); }
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>(); for (int i = 0; i < b; i++) { System.out.println(getLevelNumber(a[i],map)); } }}
进阶5;
我们还可以进一步优化,不妨换个角度,以前是自顶往下的算法,我们换成自下往上的算法。我们已知了F(1)=0,F(2)=1,F(3)=2.我们可以发现从第三解体开始,后面的都是前面两个的和。F(4)=F(3)+F(2).......
也是一个二叉树的形式,我们就可以通过一个for循环,然后不断替换彼此的身份即可。
public class Main {static int getLevelNumber(int n){if(n<1){return 0;}if(n==1){return 0;}if(n==2){return 1;}if(n==3){return 2;}int temp=0;int a=0;int b=1;for(int i=3;i<=n;i++){temp=a+b;a=b;b=temp;}return temp;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int b = sc.nextInt();int a[] = new int[b];for (int i = 0; i < b; i++) {a[i] = sc.nextInt();}for (int i = 0; i < b; i++) {System.out.println(getLevelNumber(a[i]));}}
}
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一级有0种走法。相关推荐
- 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法. 给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于10 ...
- 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现。
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现. 输入: 输入一个整数M(1<=M<=20),表示楼梯的级数. 输出: 输出不同走法 ...
- 超级楼梯——有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法?
有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法? 现在给你一个正整数n(0<n<40),请你输出不同的走法数. 如n=2,则输出1(你只有一种走 ...
- 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径
题目描述 给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和. 思路: 1.排列组合 要从A到B,必须向左走6 ...
- 给定一个矩阵m*n,从左上角开始每次只能向右和向下走,最后到右下角的位置共有多少种路径。
#include <bits/stdc++.h> using namespace std; /* 每次只能向右或向下走 dp[m][n] = dp[m-1][n]+dp[m][ ...
- [算法]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径
很经典的一道题 等同于:https://leetcode-cn.com/problems/unique-paths/ 在完美世界面试中遇到了. 每次都只能向右或者向下走,求出所有种情况. 当时想到的思 ...
- [分支限界]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径
分支限界解最短路径 问题描述: 要求: 随机数算法 分支限界算法 程序源码 问题描述: 给定一个m行n列的矩阵,从左上角开始每次只能向右或向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这 ...
- HDU2040有一楼梯共M级,刚开始时你在第一级
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? 此道题使用类似斐波那契数列方法运用迭代进行操作如果递归会超时 #include<stdio.h> ...
- 有N个台阶,一步可以走一梯或者两梯,请问有多少种走法
有N个台阶,一步可以走一梯或者两梯,请问有多少种走法 最近面试,被问到了这个问题,由于没有看过算法这方面的题,自然这题就凉凉了 力扣题链接 https://leetcode-cn.com/proble ...
最新文章
- 英特尔2022年投资者大会:公布技术路线图及重要节点
- 保姆级教程,手把手教你实现一个SpringBoot的starter
- 2018 中国准独角兽 TOP 50 夏榜发布!146 家投资机构、227 家企业参与
- tensorboard 数据降维分布图_以mnist为例探究tensorboard
- java自动转换_java类型转换详解(自动转换和强制转换)
- PCB 电子线路板制作流程
- 四叶草社交平台——十天冲刺(10)
- java模拟网易邮箱登录_求赐教:网易邮箱Web端模拟登录看信的加密参数_ntes_nnid、_ntes_nuid...
- java.io.IOException 权限不够
- 持续交付 devops_DevOps如何帮助向用户交付出色的应用程序
- jsp 中select 下拉选择框 el 三元运算符 如何选中与不选中
- pytorch WHAT IS TORCH.NN REALLY?
- monkey4444勒索病毒解密方法方案成功处理复旦安全实验室
- Java项目中常见的文件夹名称
- ubuntu10.10下安装五笔86输入法
- linux 文件服务器dlna,Ubuntu DLNA服务器的构建
- 打卡day01 python基础—常用数据类型
- android中高德地图定位功能并且获取定位的城市
- Vue3+vite配置postcss-pxtorem报错[plugin:vite:css] Failed to load PostCss config
- 聚焦低代码SaaS云服务,让企业轻松办公!
热门文章
- AJAX的教程(一)
- 突然断电对oracle的影响,Oracle数据库之由于突然断电造成oracle数据库的部分clob字段值变为(损毁)...
- 明德扬基于XILINX K7核心板325T/410T
- 免费网站源码分享平台 有哪些好的源码网站
- 小程序开发+weuiwxss
- 国内CDN行业优质服务商
- 公链参考:只有在熊市里,才知道谁站着最稳
- oracle按非选列排序,如何选择和排序不在Groupy中的列按SQL语句 – Oracle
- 小白scrapy试炼-爬取慕课网免费课程
- 怎么营造一个好的开发氛围