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]);
}
}