https://leetcode-cn.com/problems/triangle/submissions/
dp,自底向上
class Solution:
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
n = len(triangle)
dp = [triangle[-1]] * n #初始矩阵为最后一行*n
for i in range(n-2, -1, -1):
size = len(triangle[i])
for j in range(size):
dp[i][j] = min(dp[i][j], dp[i][j+1]) + triangle[i][j]
return dp[0][0]
优化:每次迭代后该行不再使用,可以覆盖,只用一个list做dp
class Solution:
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
n = len(triangle)
dp = triangle[-1]
for i in range(n-2, -1, -1):
size = len(triangle[i])
for j in range(size):
dp[j] = min(dp[j], dp[j+1]) + triangle[i][j]
return dp[0]