leetcode 120: 三角形最小路徑和
阿新 • • 發佈:2018-12-15
題目描述:
給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。
例如,給定三角形:
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
自頂向下的最小路徑和為 11
(即,2 + 3 + 5 + 1 = 11)。
說明:
如果你可以只使用 O(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那麼你的演算法會很加分。
兩種解法吧
解答一:從上至下,記錄每個
def minimumTotal(triangle): """ :type triangle: List[List[int]] :rtype: int """ a=['0']*(len(triangle)+1) for b in triangle: for j in range(len(b)-1,-1,-1): if a[j]=='0' and a[j+1]=='0': a[j+1]=b[j] elif a[j]=='0' and a[j+1]!='0': a[j+1]=a[j+1]+b[j] elif a[j]!='0' and a[j+1]=='0': a[j+1]=a[j]+b[j] else: a[j+1]=min(a[j],a[j+1])+b[j] return min(a[1:])
解答二:從下至上,感覺簡單好多
class Solution(object): def minimumTotal(self, triangle): """ :type triangle: List[List[int]] :rtype: int """ res = triangle[-1] for i in range(len(triangle)-2,-1,-1): for j in range(len(triangle[i])): res[j] = min(res[j],res[j+1])+triangle[i][j] return res[0]