Leetcode:120. 三角形最小路径和 - 力扣(LeetCode) (leetcode-cn.com)
#f(m,0)=f(m-1,0)+triangle[m][0]
#f(m,n)=min(f(m-1,n),f(m-1,n-1))+triangle[m][n]
#f(m,len(triangle[n]-1))=f(m-1,len(triangle[n]-1-1)+triangle[m][len(triangle[n]-1]
代码如下:
class Solution(object):
def minimumTotal(self, triangle):
"""
:type triangle: List[List[int]]
:rtype: int
"""
#f(m,0)=f(m-1,0)+triangle[m][0]
#f(m,n)=min(f(m-1,n),f(m-1,n-1))+triangle[m][n]
#f(m,len(triangle[n]-1))=f(m-1,len(triangle[n]-1-1)+triangle[m][len(triangle[n]-1]
f = [[0] * len(tr) for tr in triangle]
f[0][0] = triangle[0][0]
for i in range(1, len(triangle)):
f[i][0] = f[i - 1][0] + triangle[i][0]
for j in range(1, len(triangle[i]) - 1):
f[i][j] = min(f[i - 1][j], f[i - 1][j - 1]) + triangle[i][j]
f[i][len(triangle[i]) - 1] = f[i - 1][len(triangle[i]) - 2] + triangle[i][len(triangle[i]) - 1]
return min(f[-1])