【LeeCode】剑指 Offer II 088. 爬楼梯的最少成本
原创
©著作权归作者所有:来自51CTO博客作者51玖拾柒的原创作品,请联系作者获取转载授权,否则将追究法律责任
【题目描述】
数组的每个下标作为一个阶梯,第 i
个阶梯对应着一个非负数的体力花费值 cost[i]
(下标从 0
开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
https://leetcode.cn/problems/GzCJIP/
【示例】
【代码】
思路:动态规划
package com.company;
import java.util.*;
// 2023-2-27
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int[] dp = new int[len];
// 从下标0开始爬
dp[0] = cost[0];
// 从下标开始爬
dp[1] = cost[1];
for (int i = 2; i < len; i++){
dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];
}
// System.out.println(dp[len - 1]);
return Math.min(dp[len - 1], dp[len - 2]);
}
}
public class Test {
public static void main(String[] args) {
new Solution().minCostClimbingStairs( new int[]{10,15,20}); // 输出: 15
new Solution().minCostClimbingStairs( new int[]{1,100,1,1,1,100,1,1,100,1}); // 输出: 6
}
}
【代码】
思路:动态规划
package com.company;
import java.util.*;
// 2023-2-28
class Solution {
public int minCostClimbingStairs(int[] cost) {
int size = cost.length;
int[] minCost = new int[size];
// 最开始从0开始
minCost[0] = 0;
// 最开始从1开始:
minCost[1] = Math.min(cost[0], cost[1]);
for (int i = 2; i < size; i++) {
minCost[i] = Math.min(minCost[i - 1] + cost[i], minCost[i - 2] + cost[i - 1]);
}
return minCost[size - 1];
}
}
public class Test {
public static void main(String[] args) {
new Solution().minCostClimbingStairs( new int[]{10,15,20}); // 输出: 15
new Solution().minCostClimbingStairs( new int[]{1,100,1,1,1,100,1,1,100,1}); // 输出: 6
}
}