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。
从第二行开始,每个单元格取其左上角和正上方两个单元格中的较小的值,再加上当前节点的值。
则最后一行中的最小值,即为所求。