LeetCode Problem 使用最小花費爬樓梯 Python
阿新 • • 發佈:2018-12-27
爬到索引為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])