题目0120:三角形最小路径和

题目描述

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

自顶向下的最小路径和为11(即2 + 3 + 5 + 1 = 11)。

说明:如果你可以只使用O(n)的额外空间(n为三角形的总行数)来解决这个问题,那么你的算法会很加分。

解答技巧

class Solution:
    def minimumTotal(self, triangle: List[List[int]]) -> int:
        n = len(triangle)
        dp = [0] *n
        for i in range(n):
            for j in range(i,-1,-1):
                if j==0:
                    dp[j]=dp[j] + triangle[i][j]
                elif j ==i:
                    dp[j] = dp[j-1]+triangle[i][j]
                else:
                    dp[j] = min(dp[j],dp[j-1]) + triangle[i][j]
        return min(dp)