【题目】
爬楼梯变式,可以上1/2台阶,每个台阶有cost,求爬上去的最小耗费
You are given an integer array
cost
where cost[i]
is the cost of ith
step on a staircase. Once you pay the cost, you can either climb one or two steps.You can either start from the step with index 0
, or the step with index 1
.
Return the minimum cost to reach the top of the floor.
Example 1:
Input: cost = [10,15,20] Output: 15 Explanation: Cheapest is: start on cost[1], pay that cost, and go to the top.
Example 2:
Input: cost = [1,100,1,1,1,100,1,1,100,1] Output: 6 Explanation: Cheapest is: start on cost[0], and only step on 1s, skipping cost[3].
【思路】
- 全都能动态规划为爬一节/两节的问题
- 由初始的dp[0] dp[1]推导后面
【代码】
class Solution { public int minCostClimbingStairs(int[] cost) { //说了length>=2 int len=cost.length; int[] dp=new int[len]; for(int i=0;i<len;i++){ if(i<2) dp[i]=cost[i]; else dp[i]=cost[i]+Math.min(dp[i-1],dp[i-2]); } return Math.min(dp[len-1],dp[len-2]); } }