class Solution {
public:
int climbStairs(int n) {
if (n<3) return n;
std::vector<int> dp(2);
dp[0]=1, dp[1]=2;
for (int i=0, sum; i<n-2;i++){
sum = dp[0]+dp[1];
dp[0]=dp[1];
dp[1]=sum;
}
return dp[1];
}
};
class Solution {
public:
int climbStairs(int n) {
if (n==1) return n; // n=1特殊情况直接返回 因为dp(1) dp[1]会越界
std::vector<int> dp(n); // 爬到j阶有dp[j]种方法
dp[0]=1, dp[1]=2;
for (int j=2; j<n;j++) dp[j]=dp[j-1]+dp[j-2]; // 背包
return dp[n-1];
}
};
class Solution {
public:
int climbStairs(int n) {
if(n<3)return n;// n>=1
return climbStairs(n-1) + climbStairs(n-2);
}
};