数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/GzCJIP
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
输入:cost = [10, 15, 20] 输出:15
思路:
动态规划,dp[i] 为到第 i 层所需花费的最少体力。
代码:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int[] dp = new int[len + 1];
dp[0] = dp[1] = 0;
for(int i = 2; i <= len; i ++) {
dp[i] = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);
}
return dp[len];
}
}