前言
在其他地方看到这个题目,感觉蛮有意思。可以通过栈递归做,但是不如直接实现递推公式更省空间
公式
f ( 1 ) = 1 f ( 2 ) = 2 f ( n ) = f ( n − 1 ) + f ( n − 2 ) n ≥ 3 f(1)=1\\f(2)=2\\f(n)=f(n-1)+f(n-2)\ n\geq3 f(1)=1f(2)=2f(n)=f(n−1)+f(n−2) n≥3
代码
class Solution {
public:
int climbStairs(int n) {
if (n==1){
return 1;
}
else if (n==2){
return 2;
}
int fn_1 = 1, fn_2 = 2;
int fk = 0;
int k = 3;
while (k<=n){
// ----------------------------
// 执行递推公式
// ----------------------------
fk = fn_1 + fn_2;
fn_1 = fn_2;
fn_2 = fk;
// 递推+1
k +=1;
}
return fk;
}
};