本题和之前的爬楼梯类似,但是需要考虑到花费的问题!**注意,只有在爬的时候,才花费体力!**那么,我们还是按照动态规划的五部曲来思考。
首先我们要确定dp数组的含义,那么就是我们爬到第i层所花费的体力
然后确定递推公式:那我们爬到第i层的花费,可以由i-1之前的花费也就是dp[i-1]+爬到i层需要的花费cost[i-1]得到。也可以由dp[i-2]+cost[i-2]得到,那我们需要求最小值,也就是min。
然后初始化,我们可以站在0阶梯处,这时候花费是0 即dp[0] = 0;也可以在1处开始,dp[1] = .0。(因为题中说明可以从0或者1开始,并且只有移动的时候才花费体力)
确定顺序:我们直接从0开始往后遍历即可
打印dp
class Solution {
public int minCostClimbingStairs(int[] cost) {
//确定一共有多少阶梯
int len = cost.length;
int[] dp = new int[len+1];
dp[0] = 0;
dp[1] = 0;
for(int i = 2;i<=len;i++){
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[len];
}
}
注意:关于length length() size():
length——数组的属性;
length()——String的方法;
size()——集合的方法 list;