leetcode 746. 使用最小花费爬楼梯 简单 动态规划

题目:
在这里插入图片描述
题目可能描述的不是很好,这里再补充一下:最后一个阶梯不等于楼顶,从这个阶梯爬一个或两个阶梯都是消耗一样的体力

分析:花费体力最少,“最”类问题,当前问题的解等于子问题的最优解+当前情况的解,转化在这个题目上可以这么想,假设当前阶梯就是最后一个阶梯了,那么体力花费等于当前阶梯体力花费+之前体力花费的最小值(由于可以爬一个或两个阶梯,所以要记录之前一个和两个阶梯的最小体力值)
当前问题:假设当前阶梯就是最后一个阶梯,求整个问题的体力花费
子问题:有两个,1.前一个阶梯花费体力最小值,2.前两个阶梯花费体力最小值

代码:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
    	//记录两个阶梯前的体力花费最小值
        int beforeMin = 0;.
        //记录一个阶梯前的体力花费最小值
        int currentMin = 0;
        for(int i = 0; i < cost.length; i++){
            int currentCost = cost[i] + Math.min(beforeMin, currentMin);
            //更新currentMin前先保存再前一个问题的解,这样本次循环后,beforeMin成为两个阶梯前的体力花费最小值
            beforeMin = currentMin;
            //更新为当前求解,本次循环后变成上一个问题的最优解
            currentMin = currentCost;
        }
        return Math.min(beforeMin, currentMin);
    }
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值