没想到思路和 斐波那契数列 这么像
就是
dp[ n ] = dp [ n - 1] + dp [ n - 2 ]
原因: 走到 第 n 阶可以 由 n - 1 阶走一步得到 也可以 由 n - 2 阶 走两步得到
这里有点小细节:
1. 初始化下标从 1 开始
2. 遍历的时候,下标从 3 开始
class Solution {
public:
int climbStairs(int n) {
if(n <= 1) return n;
vector<int> dp(n + 1);
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n ; i++)
{
dp[i] = dp[ i - 1] + dp[ i - 2];
}
return dp[n];
}
};
同样可以进行优化
class Solution {
public:
int climbStairs(int n) {
if(n <= 1 ) return n;
int dp[3];
dp[1] = 1;
dp[2] = 2;
for(int i = 3 ;i <= n ; i++)
{
int sum = dp[1] + dp[2];
dp[1] = dp[2]; // 这里就是相等于 都向后移动一位
dp[2] = sum;
}
return dp[2];
}
};