题目
三角形数组的最小路径和
思路
自底向上的动态规划
状态定义为:从最后一行开始走到第i,j位置的最小路径和
状态转移方程:(i, j)值为:正下值(i+1, j),和右下值(i+1, j+1)较小的,加上当前值
初始化最后一行为本身,因为没有下一行。
代码
简化二维数组到一维,因为一次更新上一行的值只需要用到下一行的值
class Solution(object):
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
if not triangle:
return 0
res = triangle[-1] # 初始化为最后一行
for i in range(len(triangle)-2,-1,-1): # 从倒数第二行开始更新,到第0行
for j in range(len(triangle[i])):
res[j] = triangle[i][j] + min(res[j],res[j+1])
return res[0]