(Leetcode)746

发布时间 2023-07-04 16:53:24作者: 杨百顺
// 方式一:第一步不支付费用
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int len = cost.length;
        int[] dp = new int[len + 1];

        // 从下标为 0 或下标为 1 的台阶开始,因此支付费用为0
        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];
    }
}

终于看懂题目了。题目给出的只是台阶,不包括水平线和天台。虽然索引从0开始,但0算是第一个台阶。
第一个例子【10,15,20】。

体力值  10  15  20    
水平线   0   1   2  天台

一次最多可以跨两步。cost[i]为离开当前台阶需要的体力,水平线出发不花体力。

如果离开水平线跨1步到了0级,耗费体力为0;然后离开0级跨一步或两步都是10体力,如果跨到2级,这时还没到天台,还要跨一步离开2级要20体力。所以共需要30体力。

如果一开始跨2步直接到1级,花费0体力,然后离开1级跨两步直接上天台,花费15体力。所以共需要15体力


参考博客:
Leetcode吃拌面想喝汤
746.使用最小花费爬楼梯代码随想录