题目:有n级台阶,你可以选择一次爬1级或者2级,问上去有几种不同的方法?
分析:这其实是一道典型的斐波拉契数列。因为考虑第一次选择:你可以爬1级,也可以爬2级,所以f(n) = f(n-1) + f(n-2)
答案:先写了个递归的方法:
class Solution {
public:
int climbStairs(int n) {
if (n == 1)
return 1;
if (n == 2)
return 2;
return climbStairs(n-1) + climbStairs(n-2);
}
};
然后tle了。。所以还是老老实实循环:
class Solution {
public:
int climbStairs(int n) {
int n_n_1 = 2;
int n_n_2 = 1;
int n_n;
if (n == 1)
return 1;
if (n == 2)
return 2;
for(int i = 3; i<= n; i++){
int tmp = n_n;
n_n = n_n_1 + n_n_2;
n_n_2 = n_n_1;
n_n_1 = n_n;
}
return n_n;
}
};