LeetCode_70_爬楼梯
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层台阶。
- 如果我们选择最后一步只爬一层台阶,到达第 i i i层,则这种情况一共有dp[i-1]种方案,因为我们一定是从第 i − 1 i-1 i−1层爬1层台阶上来的,因此有dp[i-1]种方法。
- 如果我们选择最后一步爬两层台阶,到达第 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_爬楼梯相关推荐
- LeetCode简单题之爬楼梯
题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1 ...
- LeetCode实战:爬楼梯
题目英文 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...
- 【每日一算法】爬楼梯
微信改版,加星标不迷路! 每日一算法-爬楼梯 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多 ...
- msteel能计算钢结构楼梯吗_坚持爬楼梯能减肥吗 怎么爬楼梯可以减肥
现在很多高楼都装有电梯,因此很多人都偏向于挤电梯而不是爬楼梯.即使自己所在的楼层很低都是这样的.但其实适当的爬楼梯是有利于锻炼身体的,据说还有减肥的功效.那么你觉得坚持爬楼梯能减肥吗?下面我们一起去健 ...
- 计蒜客 挑战难题 爬楼梯
计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...
- 《LeetCode力扣练习》第70题 爬楼梯 Java
<LeetCode力扣练习>第70题 爬楼梯 Java 一.资源 题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶 ...
- 【LeetCode】70.爬楼梯
题目 假设你正在爬楼梯,需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶,你有多少种不同的方法可以爬到楼顶呢? 题解 方法1:基本递归 算法 基本递归即初学递归时所学的最简单.最直观的方 ...
- 戴森要搞能爬楼梯的吸尘器,两项专利设计现已提交
博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 卖了二十多年吸尘器的戴森,现在也开始搞机器人了! 别误会,不是普普通通的扫地机器人,而是酱紫可以爬楼的-- 吸尘器. 还有这种可以看上去可以 ...
- 全凭“脚感”,这个不看路的机器人就能稳稳爬楼梯,一脚踩空也不怕 | RSS 2021...
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 能自己走台阶: △安全绳仅用于防止意外 一不小心踩空了也能及时调整步伐. 上下斜坡更是闲庭信步. 你敢信,这只名叫Cassie的双足机器人, ...
最新文章
- tf.nn.relu
- Nginx对某个文件夹或整个站点进行登录认证的方法
- JavaScript常用函数
- python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法
- 文件管理的艺术之SVN从零搭建
- 高中生毕业落榜学计算机,高中毕业落榜了 不想复读怎么办_2019年高考落榜怎么办...
- 大数据领域33个预测,开启未知的2016
- 这可能是关于Pytorch底层算子扩展最详细的总结了!
- Chain of responsibility(职责链)--对象行为型模式
- java-appium-527进阶-1 UiAutomator12区别和封装
- python模块:JSON模块
- win10安装CUDA和cuDNN详解
- CAS 单点登录模块学习
- 一步一步写算法(之通用数据结构)
- SAS基础练习(一)
- Ext4核心组件Grid的变化及学习(2):数据列的基本操作
- android实现b站弹幕,B站弹幕库DanmakuFlameMaster源码浅析
- spss相关分析(spss统计分析实验教程,谢蕾蕾)
- MarkdownPad2行内公式如何用`$$`替代`\\(\\)`---MathJax风格化配置
- XShell免费版的安装配置教程以及使用教程