题目描述:
这道题应该属于比较简单的动归了,一眼扫过去差不多能出公式:
可以想象当前步只能由上一步和上上步两个途径加起来,dp数组存储到当前步有多少条路
那么 i 的子问题就是 i-1 和 i-2
dp[i] = dp[i-1] + dp[i-2] if((i-2) >= 0);
dp[i] = dp[i-1] if(i == 1)
dp[i] = 1 if(i == 0)
class Solution {
public:
int climbStairs(int n) {
//这个的话,其实算是简单DP吧
//可以想象当前步只能由上一步和上上步两个途径加起来,dp数组存储到当前步有多少条路
//那么 i 的子问题就是 i-1 和 i-2
//dp[i] = dp[i-1] + dp[i-2] if((i-2) >= 0);
//dp[i] = dp[i-1] if(i == 1)
//dp[i] = 1 if(i == 0)
int dp[n + 5];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
};