本题的递推公式和第一题的斐波那契数列相同
难在了如何自己想出递推公式(第一题递推公式直接给出)
int climbStairs(int n) {
/*
dp数组含义
爬到第i层台阶有dp[i]种方法
递推公式
可以到第i层台阶的方式
1^i-1跳一层
2^i-2跳两层
所以dp[i]=dp[i-1]+dp[i-2]
初始化
dp[0]可以不用初始化
题目中n的范围不包括0
所以初始化1和2
dp[1]=1|dp[2]=2;
遍历顺序
从前往后
*/
if(n<=2)
return n;
vector<int> dp(n + 1);
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <dp.size(); i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}