1.题目:
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例 1:
输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开始。
- 支付 15 ,向上爬两个台阶,到达楼梯顶部。 总花费为 15 。
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/min-cost-climbing-stairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.代码:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int[] dp = new int[cost.length+1];//算上楼顶
dp[0]=0;//题目说:你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
dp[1]=0;
for(int i=2; i<=cost.length; i++){//注意是从2开始
dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);//注意dp[i]是到达第i台阶所花费的最少体力为dp[i]。是花费的总和
}
return dp[cost.length];//返回最后即可
}
}