https://leetcode.com/problems/triangle/description/
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
[
[2]
[3,4]
[6,5,7]
[4,1,8,3]
]
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 +1 = 11).
Note: Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
给一个类似上图所示的三角形,找一个从三角形顶部到到底部的路径,使路径上的数字相加最小。在路径的选择中,只能选择下一行与目前数字相邻的两个数字作为下一步。
选择自底向上的方法,从倒数第二行开始,计算这行每个元素到下一层的最小路径。比如上图中的例子,倒数第二行中第一个元素(6)到下一层(底层)的最小路径是6+1 = 7,然后更新这个位置的数字为7,第二个元素(5)的最小路径是5+1 = 6,更新这个位置的数字为6,第三个元素(7)的最小路径7+3 = 10,更新此位置的数字为10。然后继续向上执行相同的动作。
class Solution:
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
for row in range(len(triangle)-2, -1, -1):
for col in range(len(triangle[row])):
triangle[row][col] += min(triangle[row+1][col], triangle[row+1][col+1])
return triangle[0][0]