On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed).
Once you pay the cost, you can either climb one or two steps. You need to find minimum cost to reach the top of the floor, and you can either start from the step with index 0, or the step with index 1.
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].
Note:
cost will have a length in the range [2, 1000].
Every cost[i] will be an integer in the range [0, 999].
解法
想清楚了会发现是一个简单的动态规划问题,在每一层都可以想作是从前一级来的花费+爬一级台阶的花费和从前两级来的花费+爬两级台阶的花费,因为可以从地面也可以从第一级台阶出发,所以这两层的总花费都是0.sum[n]=min(sum[n-1]+cost[n-1],sum[n-2]+cost[n-2])
class Solution {
public int minCostClimbingStairs(int[] cost) {
if(cost.length==0) return 0 ;
if(cost.length==1) return cost[1] ;
int sum[] = new int[cost.length+1];
sum[0]=0;
sum[1]=0;
for(int i= 2;i<cost.length+1;i++)
{
sum[i]=Math.min(sum[i-1]+cost[i-1],sum[i-2]+cost[i-2]);
}
return sum[cost.length];
}
}