LeetCode_70_爬楼梯

考察内容:

动态规划

题目描述:

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

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

注意:给定 n 是一个正整数

示例:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

解题思路:

这道题目是典型的动态规划类型题目,首先我们要理解动态规划的思想:大事化小,小事化无。将大规模的问题转换为一个个小规模问题,并且保存这些小规模问题的答案,为最后求解大规模问题做准备。

这道题需要反向思考,即从后往前考虑。假设dp[i]表示爬上第 i i i层台阶所有的方案数,根据题目要求,我们一次只能爬1层台阶或者2层台阶。

  1. 如果我们选择最后一步只爬一层台阶,到达第 i i i层,则这种情况一共有dp[i-1]种方案,因为我们一定是从第 i − 1 i-1 i−1层爬1层台阶上来的,因此有dp[i-1]种方法。
  2. 如果我们选择最后一步爬两层台阶,到达第 i i i层,同理,这种情况共有dp[i-2]种方案,因为只能在dp[i-2]的每种方案末尾加上2阶才能实现爬两层台阶到达第 i i i层。

所以,由上面的分析我们就可以写出本题的状态转移方程:dp[i] = dp[i-1] + dp[i-2]

C++解题如下:

class solution{public:int climbStairs(int n){vector<int>dp(n+1);//因为题目说n是正整数,而数组下标又从0开始,所以我们让dp数组比n大1//让dp数组从下标为1开始存储if(n <= 2){return n;}//1层台阶只有1种方法,2层台阶有2种方法,这相当于边界条件for(int i = 3; i < n + 1 ;i++){dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];//最后返回第n层台阶的所有方案即可。}
};

我们注意到,其实对于每个 n > 2 n > 2 n>2,它的方案数量都只跟 n − 1 n - 1 n−1与 n − 2 n - 2 n−2有关系,所以我们可以使用滑动窗口的方法使得额外开销从一个大小为 n + 1 n + 1 n+1的数组优化为O(1)

如上图所示,p与q之和是r,在计算一次之后我们可以将第一次的p弹出窗口,将第一次的q放在p的位置,第一次的r放在q的位置,再计算第二个r…以此类推。这就像p、q、r是一个固定的窗口,我们在不断向后滑动它一样。如此一来我们只需要一个大小为3的窗口,而不用创建一个大小为n+1的dp数组了。

class solution{public:int climbStairs(int n){if(n <= 2){return n;}int p = 1, q = 2, r = 0;//初始化滑动窗口for(int i = 3; i < n; i++){r = p + q;p = q; q = r;//上面动画演示的过程,即窗口滑动的过程}return r;}
};

LeetCode_70_爬楼梯相关推荐

  1. LeetCode简单题之爬楼梯

    题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1 ...

  2. LeetCode实战:爬楼梯

    题目英文 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...

  3. 【每日一算法】爬楼梯

    微信改版,加星标不迷路! 每日一算法-爬楼梯 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多 ...

  4. msteel能计算钢结构楼梯吗_坚持爬楼梯能减肥吗 怎么爬楼梯可以减肥

    现在很多高楼都装有电梯,因此很多人都偏向于挤电梯而不是爬楼梯.即使自己所在的楼层很低都是这样的.但其实适当的爬楼梯是有利于锻炼身体的,据说还有减肥的功效.那么你觉得坚持爬楼梯能减肥吗?下面我们一起去健 ...

  5. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  6. 《LeetCode力扣练习》第70题 爬楼梯 Java

    <LeetCode力扣练习>第70题 爬楼梯 Java 一.资源 题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶 ...

  7. 【LeetCode】70.爬楼梯

    题目 假设你正在爬楼梯,需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶,你有多少种不同的方法可以爬到楼顶呢? 题解 方法1:基本递归 算法 基本递归即初学递归时所学的最简单.最直观的方 ...

  8. 戴森要搞能爬楼梯的吸尘器,两项专利设计现已提交

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 卖了二十多年吸尘器的戴森,现在也开始搞机器人了! 别误会,不是普普通通的扫地机器人,而是酱紫可以爬楼的-- 吸尘器. 还有这种可以看上去可以 ...

  9. 全凭“脚感”,这个不看路的机器人就能稳稳爬楼梯,一脚踩空也不怕 | RSS 2021...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 能自己走台阶: △安全绳仅用于防止意外 一不小心踩空了也能及时调整步伐. 上下斜坡更是闲庭信步. 你敢信,这只名叫Cassie的双足机器人, ...

最新文章

  1. tf.nn.relu
  2. Nginx对某个文件夹或整个站点进行登录认证的方法
  3. JavaScript常用函数
  4. python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法
  5. 文件管理的艺术之SVN从零搭建
  6. 高中生毕业落榜学计算机,高中毕业落榜了 不想复读怎么办_2019年高考落榜怎么办...
  7. 大数据领域33个预测,开启未知的2016
  8. 这可能是关于Pytorch底层算子扩展最详细的总结了!
  9. Chain of responsibility(职责链)--对象行为型模式
  10. java-appium-527进阶-1 UiAutomator12区别和封装
  11. python模块:JSON模块
  12. win10安装CUDA和cuDNN详解
  13. CAS 单点登录模块学习
  14. 一步一步写算法(之通用数据结构)
  15. SAS基础练习(一)
  16. Ext4核心组件Grid的变化及学习(2):数据列的基本操作
  17. android实现b站弹幕,B站弹幕库DanmakuFlameMaster源码浅析
  18. spss相关分析(spss统计分析实验教程,谢蕾蕾)
  19. MarkdownPad2行内公式如何用`$$`替代`\\(\\)`---MathJax风格化配置
  20. XShell免费版的安装配置教程以及使用教程

热门文章

  1. 递归算法 -- 计算n!(n的阶乘)
  2. Android Studio汉化包
  3. 简单聊聊微信接听逻辑
  4. 计算机毕业设计SSM儿童绘本租赁网站【附源码数据库】
  5. 网吧禁用解禁USB U盘方法
  6. emule编译 vs2005+win7+最新版本电驴
  7. 华硕无畏Pro14和 联想小新pro14参数对比 哪个好
  8. LOL 韩服下载地址
  9. 2019新的一年,美好的心情来源发现,给大家分享一个双显示器下显示不同的桌面背景
  10. RANSAC算法原理与应用(1)