28.動態規劃-使用最小花費爬樓梯-Leetcode 746(python)
阿新 • • 發佈:2018-12-05
- 題目描述
陣列的每個索引做為一個階梯,第 i
個階梯對應著一個非負數的體力花費值 cost[i]
(索引從0開始)。
每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。
您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。
- 示例
示例 1:
輸入: cost = [10, 15, 20] 輸出: 15 解釋: 最低花費是從cost[1]開始,然後走兩步即可到階梯頂,一共花費15。
示例 2:
輸入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 輸出:6 解釋: 最低花費方式是從cost[0]開始,逐個經過那些1,跳過cost[3],一共花費6。
注意:
cost
的長度將會在[2, 1000]
。- 每一個
cost[i]
將會是一個Integer型別,範圍為[0, 999]
。
- 解決思路
這道題比較簡單,自己竟然想出了大概,動態規劃的思想,當前一層的最小花費 = (之前一級的最小花費+這一層的花費)和(之前兩級的最小花費+這一層的花費)的較小值。比較傻缺的是自己寫程式碼的時候粗心大意,看了網友的程式碼才知道自己的問題在哪,謹記要細心啊
- 程式碼
class Solution(object): def minCostClimbingStairs(self, cost): """ :type cost: List[int] :rtype: int """ n = len(cost) dp = [0] * (n+1) dp[0] = cost[0] dp[1] = cost[1] for i in range(2,n): dp[i] = min(dp[i-1]+cost[i],dp[i-2]+cost[i]) dp[n] = min(dp[n-1],dp[n-2]) return dp[n]