题源:LeetCode
解析:
当n=1时:
1阶,f(1)=1
当n=2时:
1. 1 阶 + 1 阶 2. 2 阶 f(2)=2 当n=3时: 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 f(3)=f(2)+f(1)=3
可推f(n)=f(n-1)+f(n-2),即当要跳到第n阶时,可以从n-1阶跳上来,也可从第n-2阶跳上来,依次类推,此题可用递归,但当n较大时会产生大量的冗余计算,可使用数组将计算结果保留,只计算一次。
代码:
class Solution {
public:
int climbStairs(int n) {
int dp[1000];
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};