1. 程式人生 > 實用技巧 >leetcode120:三角形最小路徑和

leetcode120:三角形最小路徑和

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

相鄰的結點 在這裡指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。

例如,給定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和為11(即,2+3+5+1= 11)。

說明:

如果你可以只使用 O(n)的額外空間(n 為三角形的總行數)來解決這個問題,那麼你的演算法會很加分。


================================================Python==========================================

class Solution:
    def minimumTotal(self, triangle: List[List[int]]) -> int:
        dp = [[float("inf") for _ in range(len(triangle[-1]))] for i in range(len(triangle))]
        res = float("inf")
        dp[0][0] = triangle[0][0]
        for i in range(1, len(triangle)):
            for j in range(min(i+1, len(triangle[-1]))):
                
if j == 0: dp[i][j] = dp[i-1][j] + triangle[i][j] else: dp[i][j] = min(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j] return min(dp[-1])