演算法題:三角形的最小路徑和

GetaChan發表於2019-12-02

題目來源於力扣

理論基礎

動態規劃

三角形的最小路徑和

題目描述

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。說明:如果你可以只使用 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]

相關文章