題目來源於力扣
理論基礎
動態規劃
三角形的最小路徑和
題目描述
給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。說明:如果你可以只使用 O(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那麼你的演算法會很加分。
示例
例如,給定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和為11(即 2+3+5+1= 11)。
解題思路
動態規劃,自底向上累加,“每一步只能移動到下一行中相鄰的結點上” 是關鍵
Python 解法
class Solution(object):
def minimumTotal(self, triangle):
if not triangle: return 0
res = triangle[-1] # 最後一組元素
for i in xrange(len(triangle) - 2, -1, -1): # 倒序迴圈
for j in xrange(len(triangle[i])): # 每一層從0開始
res[j] = min(res[j], res[j+1]) + trangle[i][j]
return res[0]