Leetcode:70. Climbing Stairs
2017-12-05 11:26
447 查看
Description
You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
Example 1:
Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1 step + 1 step
2 steps
Example 2:
Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1 step + 1 step + 1 step
1 step + 2 steps
2 steps + 1 step
这道题的要求是爬n阶楼梯。每次仅仅能够爬1步或2步,总共同拥有多少种不同方法能爬到顶?是动态规划问题。如果要爬到第i阶,能够由i-1和i-2阶1次过去。
因此dp[i] = dp[i-1] + dp[i-2]。时间复杂度:O(n),空间复杂度:O(1)
class Solution { public: int climbStairs(int n) { int n2 = 0, n1 = 1, res = 0; for(int i = 0; i < n; ++ i) { res = n2 + n1; n2 = n1; n1 = res; } return res; } };
除此之外本题也是求斐波那契数列的第n+1位问题,时间复杂度:O(n),空间复杂度:O(n),采用动态规划算法复杂度更低
class Solution { public: int climbStairs(int n) { vector<int> v(n + 1); v[0] = v[1] = 1; for(int i = 2; i <= n; ++ i) v[i] = v[i - 1] + v[i - 2]; return v ; } };
相关文章推荐
- leetcode 70. Climbing Stairs爬梯子(DP问题)
- LeetCode | 70. Climbing Stairs
- LeetCode - 70. Climbing Stairs
- [LeetCode]70. Climbing Stairs
- 个人记录-LeetCode 70. Climbing Stairs
- [LeetCode]--70. Climbing Stairs
- [leetcode] 【数组】70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- leetcode 70. Climbing Stairs
- LeetCode-70. Climbing Stairs
- 【动态规划】Leetcode编程题解:70. Climbing Stairs
- LeetCode 70. Climbing Stairs
- [leetcode]#70. Climbing Stairs
- leetCode 70. Climbing Stairs
- 【LeetCode】70. Climbing Stairs
- leetcode 70. Climbing Stairs
- LeetCode --- 70. Climbing Stairs
- 【leetcode】70. Climbing Stairs
- [Leetcode]70. Climbing Stairs
- LeetCode 70. Climbing Stairs (O(n)时间, O(1)空间实现)