力扣746.使用最小花费爬楼梯
题目
给你一个整数数组 cost
,其中 cost[i]
是从楼梯第 i
个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0
或下标为 1
的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费
解题思路
动态规划
1.首先需要明确,先支付当前台阶的费用后挑层
2.到达第i级台阶的阶梯顶部的最小花费,有两个选择:
最后踏上了第i级台阶,最小花费dp[i],再迈一步到达第i级台阶楼层顶部;
最后踏上了第i-1级台阶,最小花费dp[i-1],再迈两步跨过第i级台阶直接到达第i级台阶的阶梯顶部。
所以到达第i级台阶的阶梯顶部的最小花费为minCost[i] = min(dp[i], dp[i-1])。
即为了求出到达第i级台阶的阶梯顶部的最小花费,我们先算出踏上第i级台阶的最小花费,用dp[i]表示,再通过min(dp[i], dp[i-1])来求出到达第i级台阶的阶梯顶部的最小花费。
代码
java解法,点击查看
class Solution {
public int minCostClimbingStairs(int[] cost) {
int payMin=0;
if(cost.length==2){
return cost[0]<cost[1] ? cost[0]:cost[1];
}
int length=cost.length;
int[] conPay=new int[cost.length];
conPay[0]=cost[0];
conPay[1]=cost[1];
for(int i=2;i<length;i++){
conPay[i]=Math.min(conPay[i-1],conPay[i-2])+cost[i];
}
return Math.min(conPay[length-1],conPay[length-2]);
}
}