题目描述如下:
方法一:动态规划
在题中每一个阶梯只有两种情况即爬或者不爬,这里我们用一个数组dp存储阶梯的情况,dp[i][1]存储爬阶梯消耗的能量,dp[i][0]存储不爬消耗的能量,
我们要知道第i层阶梯爬的所需消耗的最小能量,则
dp[i][0]=Math.min(dp[i-1][0]+cost[i],dp[i-1][1]+cost[i]);
应为一次只能选择爬一阶或者两阶所以第i阶不爬的话,第i-1阶必须要爬,则:
dp[i][1]=dp[i-1][1]
最后题目的结果则为Math.min(dp[cost.length-1][0],dp[cost.length-1][0]),代码实现如下:
public int minCostClimbingStairs(int[] cost) {
//dp[i][0] --不爬 dp[i][1]--爬
int[][] dp=new int[cost.length][2];
dp[0][0]=0;
dp[0][1]=cost[0];
for(int i=1;i<cost.length;i++){
dp[i][0]=dp[i-1][1];
dp[i][1]=Math.min(dp[i-1][0]+cost[i],dp[i-1][1]+cost[i]);
}
return Math.min(dp[cost.length-1][0],dp[cost.length-1][1]);
}