Description
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: You will start at index 1.
- Pay 15 and climb two steps to reach the top. The total cost is 15.
Example 2:
Input: cost = [1,100,1,1,1,100,1,1,100,1] Output: 6 Explanation: You will start at index 0.
- Pay 1 and climb two steps to reach index 2.
- Pay 1 and climb two steps to reach index 4.
- Pay 1 and climb two steps to reach index 6.
- Pay 1 and climb one step to reach index 7.
- Pay 1 and climb two steps to reach index 9.
- Pay 1 and climb one step to reach the top. The total cost is 6.
Constraints:
2 <= cost.length <= 1000
0 <= cost[i] <= 999
Code
Basically it is Climbing Stairs with costs.
Time Complexity: , Space Complexity:
寫出 DP 關係式: DP[i] = min(DP[i-1] + cost[i-1], DP[i-2] + cost[i-2]);
接著定義出 base case:DP[0] = 0; DP[1] = 0;
第二種 DP 關係式:DP[i] = cost[i] + min(DP[i-1], DP[i-2]);
定義出 base case:DP[0] = cost[0]; DP[1] = cost[1];
Problem Solved! 差別在於使用的 Spcae 為 格(上面的解法是 )。
Optimization
Space complexity 可以壓到 ,因為觀察到在 DP 計算的過程中,只會需要用到三個值。