1 import sys
 2 class Solution:
 3     def minimumTotal(self, triangle: 'List[List[int]]') -> int:
 4         row = len(triangle)
 5         if row == 1:
 6             return triangle[0][0]
 7         minval = sys.maxsize
 8         dp = [[sys.maxsize for _ in range(row+1)]for _ in range(row+1)]
 9         dp[1][1] = triangle[0][0]
10         col = 2
11         for i in range(2,row+1):
12             col += 1
13             for j in range(1,col):
14                 dp[i][j] = min(dp[i-1][j-1],dp[i-1][j]) + triangle[i-1][j-1]
15                 if i == row:
16                     minval = min(minval,dp[i][j])
17         
18         return minval

初始化dp所有单元格为maxsize值,定义dp[1][1]表示第一层第一列,是三角中的顶部元素2。

从第二行开始,每个单元格取其左上角和正上方两个单元格中的较小的值,再加上当前节点的值。

则最后一行中的最小值,即为所求。

posted on 2019-12-11 13:53  Sempron2800+  阅读(172)  评论(0编辑  收藏  举报