0
点赞
收藏
分享

微信扫一扫

力扣算法学习day27-1

青鸾惊鸿 2022-02-16 阅读 40

文章目录

力扣算法学习day27-1

746-使用最小花费爬楼梯

题目

image-20220216115448065

image-20220216115531134

代码实现

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        // if(cost.length == 2){// 我看了哈,实际上可以去掉。
        //     return Math.min(cost[0],cost[1]);
        // }

        // dp 速度 0ms
        // 1.创建dp数组。 注意:实例1可以看出楼梯顶层实际上是cost.length坐标位置。
        int[] dp = new int[cost.length+1];

        // 2.确定迭代公式
        // 类似爬楼梯,举例:比如第3阶,由于每次台阶依然只能跳跃1,2阶,故三阶台阶依然是2阶台阶跳一步
        // 1阶台阶跳2步能到,所以,到第三节需要从前面两种中去取,故选用dp,取前两阶到当前台阶花费更
        // 小的即为当前台阶最小的花费,同理,针对多阶台阶,当前台阶的依次由前两阶最小花费决定即可。
        // 迭代公式:i > 1 ,dp[i] = (dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])取最小,dp[i]为到达台阶i的最小花费。
        // 3.初始化dp数组,这里,需要初始化0,1即前两层,因为前两层是直接选择得到的,第三层开始才是公式中的选择最小。
        // dp[0] = 0;
        // dp[1] = 0;// 由于初始化默认为0,所以可以省略。

        // 4.确定遍历顺序
        for(int i = 2;i < dp.length;i++){
            dp[i] = Math.min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2]);
        }

        // 5.通过实例,验证答案和dp数组变化是否符合预期
        // for(int i = 0;i < dp.length;i++){
        //     System.out.print(dp[i]);
        // }

        return dp[cost.length];
    }
}
举报

相关推荐

0 条评论