思路
动态规划解题:
用 f(n)表示爬到第 xxx 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:
f(n) = f(n − 1) + f( n − 2)
解题方法
动态规划:
状态转移方程:f(n)=f(n − 1)+f(n − 2)
base case:
dp[1] = 1
dp[2] = 2
可以看出,f(x) 只和 f(n - 1) 和 f(n - 2) 有关,所以直接进行空间压缩,存储两个状态即可
public int climbStairs(int n) {
// 定义:第n阶需要dp[n]种方法可以爬到顶层
int[] dp = new int[2];
if(n <= 2) {
return n;
}
// base case
dp[0] = 1;
dp[1] = 2;
int result = 0;
for(int i = 3; i <= n; i ++) {
result = dp[0] + dp[1];
dp[0] = dp[1];
dp[1] = result;
}
return result;
}