理解题意需要注意两点:
第i级台阶是第i-1级台阶的阶梯顶部。
踏上第i级台阶花费cost[i],直接迈一大步跨过而不踏上去则不用花费。
public int minCostClimbingStairs(int[] cost) {
// int n = cost.length;
// for(int i = 2; i < n; i++)
// //到第i阶台阶为从i-1或者i-2阶台阶到这个台阶
// cost[i] = Math.min(cost[i-1],cost[i-2]) + cost[i];
// //到大最终的n解台阶可以从n-1阶台阶也可以从n0-2阶台阶
// return Math.min(cost[n-1],cost[n-2]);
int[] dp = new int[cost.length];
dp[0] = cost[0];
dp[1] = cost[1];
//跨到底i级台阶需要多少花费
for (int i = 2; i < cost.length; i++) {
dp[i] = Math.min(dp[i - 2], dp[i - 1]) + cost[i];
}
return Math.min(dp[cost.length - 2], dp[cost.length - 1]);
}