70.爬楼梯

这题可以算作是最基础的动态规划了,其本质就是一个斐波那契数列

试想,假设我们想到第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];
    }
}

你可能感兴趣的:(70.爬楼梯)