使用最小花費爬樓梯python
阿新 • • 發佈:2019-01-09
題目描述:
陣列的每個索引做為一個階梯,第 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。
# -*- coding:utf-8 -*- #@xinxinzhang ''' 思路:回溯法,設dp[i]為爬第i個臺階花費的體力 則:動態規劃方程:dp[i]=min{dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]} 我的: def minCostClimbingStairs(cost): dp=[0]*(len(cost)+1) if len(cost)==2: return min(cost[0],cost[1]) if len(set(cost))==1: return cost[0]*(len(cost)//2) else: for i in range(2,len(cost)+1): dp[i]=min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]) return dp[-1] ''' #大神的: def minCostClimbingStairs(cost): f1=f2=0 for x in reversed(cost): f1,f2=x+min(f1,f2),f1#用f1,f2輪流遍歷列表,輪流儲存最小值 return min(f1,f2) if __name__=='__main__': cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] print(minCostClimbingStairs(cost))