70.爬楼梯

力扣链接:70. 爬楼梯 - 力扣(Leetcode)

题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路:

假设要爬到三楼,每次可以爬一或两层,有两种选择,一种是从一楼爬两层楼梯到三楼,另一种是从二楼爬一层楼梯到三楼。即: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阶楼顶相关推荐

  1. 成功解决基于model利用plot_importance()函数出现仅输出一个、两个或者三个等特征(极少的特征)

    成功解决基于model利用plot_importance()函数出现仅输出一个.两个或者三个等特征(极少的特征) 目录 解决问题 解决方法 解决问题 利用plot_importance()函数出现仅输 ...

  2. java一次能迈一级或两级台阶_有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?...

    有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台 ...

  3. 【面试题】一个环,有n个点, 问从0点出发,经过k步回到原点有多少种方法

    一.题目描述 一个环,有n个点(编号 0 ~ n-1 ), 问从0点出发,经过k步回到原点(0点)有多少种方法 ? 二.解题思路 & 代码 再回到 0 点可以从右面回来,也可以从左面回来,即先 ...

  4. 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级 请问跳100级有多少种方法?

    一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳上3级 请问跳100级有多少种方法? 动态规划?错了请骂我 public void solve(){String dp[] = new Strin ...

  5. ads design environment_ADS应用技巧3 — 画一个巴伦有多少种方法?

    为什么ADS的Schematic不允许多任务仿真(即如果一个Schematic的仿真任务没完成,就不允许任何Schematic启动新的仿真):而Layout却允许同时运行一大堆EM仿真. 按理说,Sc ...

  6. C++:从口袋中抓三个不同颜色的球,求有多少种取法

    题目:口袋里有红.黄.蓝.绿.白.黑六种颜色的球,从口袋中先后随机拿出三个不同颜色的球,求有多少种取法,要求排列出每种可能出现的情况.(利用枚举类型表示颜色) 分析:首先在enum中写好所有的颜色,这 ...

  7. c语言编程题:m个人围成一圈,每数n个人就踢出一个直到剩下一个人,m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法?...

    导航:网站首页 > m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有多少种方法? m个人围成一圈,1,2,3循环报数,报到3的人退出,并... m个人围成一个圈有 ...

  8. android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...

  9. android 去重 比较两个list_Android 去除list集合中重复项的几种方法

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...

最新文章

  1. php 5/0,PHP 5.5.0 released.该怎么解决
  2. 程序员趣味读物:谈谈Unicode编码
  3. R语言保存图片为特定dpi值(分辨率)的图像
  4. ajax传数组到php页面上,将ajax中的元素值和数组传递到PHP页面
  5. luogu p3515 Lightning Conductor
  6. 一文看清这些年自监督和无监督的进展
  7. 阿里开源量子模拟器“太章2.0”,支持量子算法和纠错探索
  8. Quartus prime16.0 与modelsim ae 联调
  9. P4780-Phi的反函数【dfs】
  10. 让 UV4 支持STC 单片机
  11. nginx 413 Request Entity Too Large
  12. 7.python实现高效端口扫描器之nmap模块
  13. linux常用基本指令汇总备忘
  14. 软件测试知识点 | Jmeter实现接口关联小结
  15. ROS的学习(五)在工作空间中构建和使用catkin包
  16. c语言的整形变量选择题,C语言选择题 (附答案)
  17. java traingdx函数实现_提取伪彩色图像的信息
  18. CPU、核心数、线程数、运行内存、超线程理解
  19. 基于Phyton爬虫索引设计与实现答辩PPT模板
  20. Apifox:详细使用教程,带你轻松拿捏

热门文章

  1. xml 中的xsi 是什么意思?
  2. 管理计算机的作用是什么意思,ACPI是什么意思 开启acpi有什么作用?
  3. 行政事业单位财务信息化管理的分析和探讨
  4. Slick.AI用户案例-皮肤疾病图像检测辅助诊断
  5. 千方科技与关联方约37亿完成对宇视科技100%收购
  6. 吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端初诊代码简洁版实现...
  7. 在Ubuntu 18.04系统上安装最新的Adobe Flash Player
  8. php 模拟GMAIL邮箱登录
  9. Java中容易被遗忘的default关键字
  10. 研究发现:在中国学历越高的女性越瘦,男性则相反