【Leetcode】746.使用最小花費爬樓梯

題目鏈接

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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章