Day 38 | 动态规划 理论基础 、 509. 斐波那契数 、 70. 爬楼梯 、746. 使用最小花费爬楼梯

理论基础

文章讲解
视频讲解

动态规划五部曲
Day 38 | 动态规划 理论基础 、 509. 斐波那契数 、 70. 爬楼梯 、746. 使用最小花费爬楼梯_第1张图片

509. 斐波那契数

题目
文章讲解
视频讲解

思路:在这里插入图片描述

class Solution {
    public int fib(int n) {
        if (n < 2)
            return n;
        int a = 0, b = 1, c = 0;
        for (int i = 1; i < n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}

70. 爬楼梯

题目
文章讲解
视频讲解

思路:和斐波那契很像
Day 38 | 动态规划 理论基础 、 509. 斐波那契数 、 70. 爬楼梯 、746. 使用最小花费爬楼梯_第2张图片

class Solution {
    public int climbStairs(int n) {
        if (n <= 1)
            return n;
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            int sum = dp[1] + dp[2];
            dp[1] = dp[2];
            dp[2] = sum;
        }
        return dp[2];
    }
}

746. 使用最小花费爬楼梯

题目
文章讲解
视频讲解

思路:dp数组表示到达第i台阶所花费的最少体力为dp[i]。

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int len = cost.length;
        int[] dp = new int[len + 1];

        dp[0] = 0;
        dp[1] = 0;

        for (int i = 2; i <= len; i++) {
            dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }

        return dp[len];
    }
}

你可能感兴趣的:(二月红,动态规划,算法)