这题可以算作是最基础的动态规划了,其本质就是一个斐波那契数列
试想,假设我们想到第n层,那么如何才能到第n层呢?显然,只有从n-1层走一步或者n-2层走两步
那么问题来了,如何到n-1层或者n-2层呢,显然...
如此,我们把这个问题转换成一系列子问题,到这里,你可能会想用递归去做,但是如果用递归,会有很多的重复计算,所以我们可以采取动态规划的方式
dp[n] = dp[n - 1] + dp[n - 2]
dp[0] = 1 dp[1] = 1(当然dp[1] = 1 dp[2] = 2也是可以的)
class Solution {
public int climbStairs(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i ++) {
dp[i] = dp[i - 2] + dp[i - 1];
}
return dp[n];
}
}