动态规划:
- 状态定义:
f(n)
表示爬到n
阶台阶的方案数 - 状态转移方程:
f(n)=f(n-1)+f(n-2)
,因为可以爬1级台阶或者2级台阶 - 初始状态:
f(0)=1
,f(1)=1
但是直接递归会超时,因此进行状态空间的压缩:滑动窗口
class Solution {
public int climbStairs(int n) {
// if (n == 0) return 1;
// if (n == 1) return 1;
// return climbStairs(n - 1) + climbStairs(n - 2);
int a = 1, b = 1, sum;
for (int i = 1; i < n; ++i) {
sum = a + b;
a = b;
b = sum;
}
return b;
}
}