1. 程式人生 > >LeetCode Problem 使用最小花費爬樓梯 Python

LeetCode Problem 使用最小花費爬樓梯 Python

爬到索引為i的樓梯(第一層索引為0)的最小花費r[i]=min(r[i-1] + cost[i-1], r[i-2] + cost[i-2]), 確定了狀態轉移方程。但是注意r[i]定義為爬到第i層,並沒有爬完整個樓梯,所以最後返回值並不是r[-1],而是min(r[-1]+cost[-1], r[-2]+cost[-2]),(r[-1]+cost[-1], r[-2]+cost[-2])分別可以理解為爬到倒數第一層和倒數第二層的最小花費(計算時不包括這一層)加上該層的花費,因為爬到倒數第二層或者倒數第一層之後只需要爬一步沒有cost的樓層即可爬完整個樓梯。

class Solution:
    def minCostClimbingStairs(self, cost):
        """
        :type cost: List[int]
        :rtype: int
        """
        if len(cost) < 2 or len(cost) ==2:
            return 0
        r = list(range(len(cost)))
        r[0] = 0
        r[1] = 0
        for i in range(2,len(cost)):
            r[i] = min(r[i-1] + cost[i-1], r[i-2] + cost[i-2])
        return min(r[-1]+cost[-1], r[-2]+cost[-2])