0746. Min Cost Climbing Stairs

0746. Min Cost Climbing Stairs #

题目 #

  • 给定整数数组 cost,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦支付此费用,即可选择向上爬一个或两个台阶。

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

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

思路 #

动态规划 #

  • 定义状态 costs[i] 为由下标为 i 的台阶到达楼梯顶的最小花费。

代码 #

动态规划 #

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int nStairs = cost.length;
        int[] costs = new int[nStairs];
        costs[nStairs - 1] = cost[nStairs - 1];
        costs[nStairs - 2] = cost[nStairs - 2];
        for (int i = nStairs - 3; i > -1; i--) {
            costs[i] = cost[i] + Math.min(costs[i + 1], costs[i + 2]);
        }
        return Math.min(costs[0], costs[1]);
    }
}