描述
给定一个整数数组 cost \cost ,其中 cost[i]\cost[i] 是从楼梯第i \i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
public class MinCostClimbingSolve {
public int minCostClimbingStairs (int i, int[] cost,int[] minCost) {
if(i >= cost.length){
return 0;
}else if(i == cost.length-1){
return cost[i];
}
if(minCost[i] != 0){
return minCost[i];
}
int i1 = cost[i] + minCostClimbingStairs(i + 1, cost,minCost);
// 从第二个台阶走
int i2 = cost[i] + minCostClimbingStairs(i + 2, cost,minCost);
// 存储i位置花费最小的值,方便下次使用
minCost[i] = i1 > i2 ? i2 : i1;
return minCost[i];
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cost int整型一维数组
* @return int整型
*/
public int minCostClimbingStairs (int[] cost) {
int[] minCost = new int[cost.length];
int i0 = minCostClimbingStairs(0,cost,minCost);
int i2 = minCostClimbingStairs(1,cost,minCost);
return i0 > i2 ? i2 : i0;
}
public static void main(String[] args) {
// 279
int[] cost = new int[]{55,89,84,47,76,71,75,63,18,9};
int[] minCost = new int[cost.length];
MinCostClimbingSolve min = new MinCostClimbingSolve();
int res = min.minCostClimbingStairs(cost);
System.out.println(res);
}
}