70. Climbing Stairs
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
解题思路
这道题也是简单的动态规划问题,思路和746. Min Cost Climbing Stairs一致。
注意使用数组的时候,要小心size为0或1时的特殊情况,提交使会提示如下:
//*** Error in `sandbox run': double free or corruption (out): 0x000000000104de70 ***
代码如下:
class Solution {
public:
int climbStairs(int n) {
vector<int> ways(n, 0);
if(n == 1) {
return 1;
}
if(n == 2) {
return 2;
}
ways[n-1] = 1;
ways[n-2] = 2;
for(int i = n - 3; i >= 0; i--) {
ways[i] = ways[i+1] + ways[i+2];
}
return ways[0];
}
};