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]

posted @ 2020-04-27 16:00  hornets  阅读(122)  评论(0)    收藏  举报