DP-leetcode120-三角形最小路径和
题目:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
解题:
这个题难点是相邻;所以当前元素到下个路径就是[i-1][j] 或者 [i-1][j-1]
自底向上比较好实现:所以方程式为:dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]
自底向上遍历
"""
triangle:三角形数组
dp:最后一层数组,记录每轮最小值
第一层for从倒数第二层开始向上遍历
第二层for是当前层的遍历,最后一层dp数组记录每个位置 min(相邻)+上层的元素值
"""
下面我是用一维数组记录最小值:即;dp[j] = list[i][j] + min(dp[j], dp[j+1])
def res():
dp = triangle[-1]
for i in range(len(triangle)-2, -1, -1):
for j in range(len(triangle[i])):
dp[j] = list[i][j] + min(dp[j], dp[j+1])
return dp[0]
浙公网安备 33010602011771号