LCR 088. 使用最小花費爬樓梯

YRBEAUTIFUL發表於2024-03-17

陣列的每個下標作為一個階梯,第 i 個階梯對應著一個非負數的體力花費值 cost[i](下標從 0 開始)。
每當爬上一個階梯都要花費對應的體力值,一旦支付了相應的體力值,就可以選擇向上爬一個階梯或者爬兩個階梯。
請找出達到樓層頂部的最低花費。在開始時,你可以選擇從下標為 0 或 1 的元素作為初始階梯。

題解
主要方法:動態規劃
解決思路:對於到達當前臺階,總共有兩種走法,一種是跨一個臺階即從i-1臺階走到當前位置,還有一個就是跨兩個臺階走到當前位置,即從i-2臺階處走到當前位置。所以走到當前位置目前消耗的體力有兩種dp[i-1]+cost[i-1] 或者 dp[i-2]+cost[i-2], 當然是取最小值,所以狀態轉移公式為:min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp = [0 for i in range(len(cost)+1)]
        dp[0] = dp[1]
        for i in range(2, len(cost)+1):
            dp[i] = min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2])
        return dp[len(cost)]

❗容易忽略的點:dp的長度應該是n+1,因為要計算的是達到最高地方所消耗的體力,而dp[i]記錄的是達到當前位置所消耗的體力,還有就是由於一開始可以選擇在0或者1作為初始點,因此dp[0]=dp[1]=0

相關文章