题目链接
https://leetcode.com/problems/triangle/
题目原文
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 = 11).
题目大意
给定一个三角形的矩阵,给出总三角形顶部到底部的最短路径的值
解题思路
从上层开始,计算到达每个元素时的最短路径的值,并特殊化处理边缘的值;且更新每一行最短路径的值时,从末端往前更新
代码
class Solution(object):
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
sums = [0 for i in range(len(triangle))]
sums[0] = triangle[0][0]
for i in range(1, len(triangle)):
for j in range(len(triangle[i]) - 1, -1, -1):
if j == 0:
sums[j] = sums[j] + triangle[i][j]
elif j == len(triangle[i]) - 1:
sums[j] = sums[j - 1] + triangle[i][j]
else:
sums[j] = min(sums[j], sums[j - 1]) + triangle[i][j]
return min(sums)