解法一 一个循环
n的情况怎么走方法数11121+1 或 2231+1+1 或 1+2 或 2+13nnf(n-1) + f(n-2)
不可人肉列举,第n阶台阶只能从第n-1阶或n-2阶上来,所以f(n) = f(n-1) + f(n-2)。
递归(从终点开始往前求),时间复杂度高。正向计算即可:
class Solution {
public:
int climbStairs(int n) {
if (n < 3) return n;
int f1 = 1, f2 = 2, fn = 3;
for (int i = 3; i <= n; i++) {
fn = f2 + f1;
f1 = f2;
f2 = fn;
}
return fn;
}
};