BM64 最小花费爬楼梯

描述

给定一个整数数组 Java练习题—动态规划(三)_java ,其中 Java练习题—动态规划(三)_数组_02 是从楼梯第Java练习题—动态规划(三)_java_03个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

数据范围:数组长度满足 Java练习题—动态规划(三)_数组_04 ,数组中的值满足 Java练习题—动态规划(三)_java_05


示例1

输入:

[2,5,20]
  • 1.

返回值:

5
  • 1.

说明:

你将从下标为1的台阶开始,支付5 ,向上爬两个台阶,到达楼梯顶部。总花费为5
  • 1.


Java代码

import java.util.*;
public class Solution {
    public int minCostClimbingStairs (int[] cost) {
        // 爬到第i级楼梯所需的最小花销
        int[] dp = new int[cost.length + 1];
        // 可以选择从0或者1开始
        dp[0] = 0;
        dp[1] = 0;
        for (int i = 2; i <= cost.length; i++) {
            dp[i] = Math.min(
                        // 从上一个台阶往上爬
                        dp[i - 1] + cost[i - 1],
                        // 从上两个台阶往上爬
                        dp[i - 2] + cost[i - 2]
                    );
        }
        return dp[cost.length];
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.


import java.util.*;

public class Solution {
    public int minCostClimbingStairs (int[] cost) {
        int n = cost.length;
        if (n <= 1) return cost[0];
        int a = cost[0], b = cost[1], c = 0;
        for (int i = 2; i < n; i++) {
            c = Math.min(a, b) + cost[i];
            a = b;
            b = c;
        }
        return Math.min(a, b);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.