題目鏈接
746. 使用最小花費爬樓梯
題目描述
解題思路
動態規劃
每次只能一個階梯或者兩個階梯,所以要到達第 i 階,只有兩種方案,從第 i-2
階,或 從 i-1
階到達
- 假設到達第i-2階的最小花費爲p2
- 到達第i-1階的最小花費爲p1
- 第i階的花費爲curr
- 則到達第i階的最小花費的狀態轉移爲min = Math.min(p1+curr, p2+curr)
動態規劃空間優化
第一種方法需要額外申請O(n)的存儲空間,我們發現每次值的更新只和前兩位相關,所以我們可以利用兩個變量存儲前兩個狀態即可。
AC代碼
class Solution {
public int minCostClimbingStairs(int[] cost) {
int ans[] = new int[cost.length];
ans[0] = cost[0];
ans[1] = cost[1];
for(int i = 2; i < cost.length; i++){
ans[i] = cost[i] + Math.min(ans[i-1],ans[i-2]);
}
return Math.min(ans[cost.length-1],ans[cost.length-2]);
}
}
優化版本
class Solution {
public int minCostClimbingStairs(int[] cost) {
int p1 = cost[0];
int p2 = cost[1];
int value = 0;
for(int i = 2; i < cost.length; i++){
value = cost[i] + Math.min(p1,p2);
p1 = p2;
p2 = value;
}
return Math.min(p1,p2);
}
}