leetcode 70 Climbing Stairs
2017-12-18 23:49
471 查看
leetcode 70 Climbing Stairs
假设爬到楼顶需要走n步,n为正整数。你每次只能爬一步或者两步,请问有多少种爬法。算法
利用动态规划解题,找出状态n和状态n-1之间的关系,即状态转移方程,然后从前往后遍历一遍,求得结果。状态n和n-1的关系
n比n-1总步数多了一步,n的爬法种数可以从n-1的爬法种数得到:
在n-1的所有爬法后再加1步
把n-1的所有以1步结尾的爬法,把最后的1步变为2步
状态转移方程:
dp(n) = dp(n-1) + ew(n-1, 1) (n>=3)
2 (n=2)
1 (n=1)
其中ew(n-1, 1)表示总步数为n-1步时所有爬法中以1步结尾的爬法种数,
dp(n-1)表示总步数为n-1步时所有的爬法种数。
因此在从3到n遍历的过程中,我们只需要记住每个状态下的爬法种数,以及以1步结尾的爬法种数。
Code
class Solution { public: int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int lastways=2; int lastone=1; for(int i=3; i<=n; i++){ int nowone = lastways, nowways = lastways + lastone; lastways = nowways; lastone = nowone; } return lastways; } };
算法时间复杂度:O(n)
相关文章推荐
- LeetCode(70) Climbing Stairs
- leetcode(70). Climbing Stairs
- LeetCode 70 Climbing Stairs--Python实现
- 【LeetCode】C# 70、Climbing Stairs
- 【leetcode】【70】Climbing Stairs
- LeetCode 70 Climbing Stairs
- leetcode-70 Climbing Stairs
- leetcode 70 Climbing Stairs
- [Leetcode 29] 70 Climbing Stairs
- LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
- LeetCode-70-Climbing Stairs-E
- LeetCode 70 Climbing Stairs (递推)
- LeetCode-70 Climbing Stairs(斐波那契数列)
- (java)leetcode-70:Climbing Stairs
- leetcode70- Climbing Stairs
- Leetcode 70 Climbing Stairs
- Leetcode 70 Climbing Stairs 爬楼梯的方法(动态规划)
- [leetcode 70] Climbing Stairs
- [leetcode 70]Climbing Stairs
- Climbing Stairs | leetcode 70 【Java解题报告】