一步一个台阶,两个台阶,三个台阶,直到 m个台阶,有多少种方法爬到n阶楼顶
70.爬楼梯
力扣链接:70. 爬楼梯 - 力扣(Leetcode)
题目:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
假设要爬到三楼,每次可以爬一或两层,有两种选择,一种是从一楼爬两层楼梯到三楼,另一种是从二楼爬一层楼梯到三楼。即:3=2+1 or 3=1+2
同理,对于爬到二楼,也有两种情况,一种从一楼爬一层楼梯到二楼,另一种直接从0层爬两层楼梯到二楼。即:2=1+1 or 2=0+1 (两种)
同理,爬到一楼,一种情况,从0层爬一层楼梯到一楼。即:1=0+1 (一种)
因此,对于爬到三楼,总共有三种情况。3=1+1+1 or 3=0+1+1 or 3=0+1+2
不难看出,爬到三楼的总方法数由爬到二楼,一楼总方法数之和组成。
假设dp[n]代表爬到第n层的总方法数,dp[n]=dp[n-1]+dp[n-2]
也就是动态规划的方法求解:其中dp[n]=dp[n-1]+dp[n-2]为状态转移方程
代码
public int climbStairs(int n) {// 设定dp[i]为爬到第i层楼梯的方法int[] dp = new int[n+1]; /*状态方程:dp[i]=dp[i-1]+dp[i-2];解释:假设求爬到第三层楼梯的方法可以由第二层爬一楼到第三层,也可以由第一层爬两楼到第三层*//*dp[i]如何初始化dp[1]=1,dp[2]=2;至于dp[0]没有意义*/if(n <= 2) return n;dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++) {dp[i] = dp[i-1] + dp[i-2];}return dp[n];}
进阶
上题是每次只能移动一或两个台阶,倘若每次可以移动1,2,...,m个台阶,该如何求爬到n楼的总方法数
思路
假设 m=3 n=4 求爬到四楼的总方法数
和上面一样
爬到四楼可以由三楼爬一层楼梯,由二楼爬两层楼梯,由一楼爬三层楼梯。4=3+1 or 4=2+2 or 4=1+3
同理 爬到三楼 3=2+1 or 3=1+2 or 3=0+3 (四种)
同理 爬到二楼 2=1+1 or 2=0+1 (两种)
同理 爬到一楼 1=0+1 (一种)
因此,爬到四楼总共有七种方法
假设dp[i]为爬到第i楼的总方法,dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
代码
/*** 爬上n楼的总方法* @param m 每次可走台阶的最大值* @param n n楼* @return 返回爬上n楼的总方法*/public int climbStairs(int m,int n) {int[] dp = new int[n + 1];dp[0] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (i - j >= 0) dp[i] += dp[i - j];}}return dp[n];}
参考:代码随想录 (programmercarl.com)
一步一个台阶,两个台阶,三个台阶,直到 m个台阶,有多少种方法爬到n阶楼顶相关推荐
- 成功解决基于model利用plot_importance()函数出现仅输出一个、两个或者三个等特征(极少的特征)
成功解决基于model利用plot_importance()函数出现仅输出一个.两个或者三个等特征(极少的特征) 目录 解决问题 解决方法 解决问题 利用plot_importance()函数出现仅输 ...
- java一次能迈一级或两级台阶_有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?...
有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台 ...
- 【面试题】一个环,有n个点, 问从0点出发,经过k步回到原点有多少种方法
一.题目描述 一个环,有n个点(编号 0 ~ n-1 ), 问从0点出发,经过k步回到原点(0点)有多少种方法 ? 二.解题思路 & 代码 再回到 0 点可以从右面回来,也可以从左面回来,即先 ...
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级 请问跳100级有多少种方法?
一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级 请问跳100级有多少种方法? 动态规划?错了请骂我 public void solve(){String dp[] = new Strin ...
- ads design environment_ADS应用技巧3 — 画一个巴伦有多少种方法?
为什么ADS的Schematic不允许多任务仿真(即如果一个Schematic的仿真任务没完成,就不允许任何Schematic启动新的仿真):而Layout却允许同时运行一大堆EM仿真. 按理说,Sc ...
- C++:从口袋中抓三个不同颜色的球,求有多少种取法
题目:口袋里有红.黄.蓝.绿.白.黑六种颜色的球,从口袋中先后随机拿出三个不同颜色的球,求有多少种取法,要求排列出每种可能出现的情况.(利用枚举类型表示颜色) 分析:首先在enum中写好所有的颜色,这 ...
- c语言编程题:m个人围成一圈,每数n个人就踢出一个直到剩下一个人,m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法?...
导航:网站首页 > m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法? m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有 ...
- android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...
- android 去重 比较两个list_Android 去除list集合中重复项的几种方法
因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...
最新文章
- php 5/0,PHP 5.5.0 released.该怎么解决
- 程序员趣味读物:谈谈Unicode编码
- R语言保存图片为特定dpi值(分辨率)的图像
- ajax传数组到php页面上,将ajax中的元素值和数组传递到PHP页面
- luogu p3515 Lightning Conductor
- 一文看清这些年自监督和无监督的进展
- 阿里开源量子模拟器“太章2.0”,支持量子算法和纠错探索
- Quartus prime16.0 与modelsim ae 联调
- P4780-Phi的反函数【dfs】
- 让 UV4 支持STC 单片机
- nginx 413 Request Entity Too Large
- 7.python实现高效端口扫描器之nmap模块
- linux常用基本指令汇总备忘
- 软件测试知识点 | Jmeter实现接口关联小结
- ROS的学习(五)在工作空间中构建和使用catkin包
- c语言的整形变量选择题,C语言选择题 (附答案)
- java traingdx函数实现_提取伪彩色图像的信息
- CPU、核心数、线程数、运行内存、超线程理解
- 基于Phyton爬虫索引设计与实现答辩PPT模板
- Apifox:详细使用教程,带你轻松拿捏
热门文章
- xml 中的xsi 是什么意思?
- 管理计算机的作用是什么意思,ACPI是什么意思 开启acpi有什么作用?
- 行政事业单位财务信息化管理的分析和探讨
- Slick.AI用户案例-皮肤疾病图像检测辅助诊断
- 千方科技与关联方约37亿完成对宇视科技100%收购
- 吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端初诊代码简洁版实现...
- 在Ubuntu 18.04系统上安装最新的Adobe Flash Player
- php 模拟GMAIL邮箱登录
- Java中容易被遗忘的default关键字
- 研究发现:在中国学历越高的女性越瘦,男性则相反