1054. 最少费用的爬台阶方法
在楼梯上,每一号台阶都有各自的费用,即第 i 号台阶有非负成本cost [i](台阶从0号索引)。
一旦你支付了费用,你可以爬一到两步。 你需要找到最低成本来到达最高层,你可以从索引为0的楼梯开始,也可以从索引为1的楼梯开始。
样例
样例 1:
输入: cost = [10, 15, 20]
输出: 15
解释: 最便宜的方法是从第1号台阶起步,支付费用并直接到达顶层。
样例 2:
输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出: 6
解释: 最便宜的方法是从第0号台阶起步,只走费用为1的台阶并且跳过第3号台阶。
注意事项
1.cost 的总长度范围在 [2, 1000]之间.
2.每一个 cost[i] 都是一个在 [0, 999]之间的整数.
public class Solution {
/**
* @param cost: an array
* @return: minimum cost to reach the top of the floor
*/
public int minCostClimbingStairs(int[] cost) {
// Write your code here
if (cost.length <= 1) return 0;
int[][] sum = new int[cost.length][2];
sum[0][0] = 0;
sum[0][1] = 0;
sum[1][0] = cost[1];
sum[1][1] = Math.min(cost[0], cost[1]);
for (int i = 2; i < cost.length; i++) {
sum[i][0] = sum[i-1][1] + cost[i];
sum[i][1] = Math.min(sum[i][0],sum[i-1][0]);
}
return sum[sum.length - 1][1];
}
}
public class Solution {
/**
* @param cost: an array
* @return: minimum cost to reach the top of the floor
*/
public int minCostClimbingStairs(int[] cost) {
// Write your code here
if (cost.length <= 1) return 0;
int[] sum = new int[cost.length];
sum[0] = 0;
sum[1] = Math.min(cost[0], cost[1]);
for (int i = 2; i < cost.length; i++) {
sum[i] = Math.min(sum[i - 2]+cost[i-1], sum[i-1] + cost[i]);
}
return sum[sum.length - 1];
}
}
public class Solution {
/**
* @param cost: an array
* @return: minimum cost to reach the top of the floor
*/
public int minCostClimbingStairs(int[] cost) {
// Write your code here
return minCost(cost, cost.length);
}
private int minCost(int[] cost, int length) {
if (length == 1) {
return 0;
} else if (length == 2) {
return Math.min(cost[0], cost[1]);
} else {
return Math.min(cost[length - 1]+minCost(cost, length - 1),
cost[length - 2]+minCost(cost, length - 2));
}
}
}