思想很简单:动态规划,每个元素代表到达当前位置的最小和。因为最多只能相隔一个位置,所以考虑一下边界情况即可。
class Solution:
def minFallingPathSum(self, A: List[List[int]]) -> int:
n = len(A) # row
m = len(A[0]) # col
if m==1:
result = 0
for r in range(0,n):
result += A[r][0]
return result
for r in range(0,n):
if r == 0:
continue
for c in range(0,m):
if c == 0:
A[r][c] += min(A[r-1][c], A[r-1][c+1])
elif c == m-1:
A[r][c] += min(A[r-1][c-1], A[r-1][c])
else:
A[r][c] += min(A[r-1][c-1], A[r-1][c], A[r-1][c+1])
if r == n-1:
result = min(A[r])
return result