-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
Copy path0931-minimum-falling-path-sum.py
33 lines (31 loc) · 1.19 KB
/
0931-minimum-falling-path-sum.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution:
def minFallingPathSum(self, matrix: List[List[int]]) -> int:
Memo = {}
def Path(i, k, n):
if (i, k) in Memo:
return Memo[(i, k)]
if i == n - 1:
return matrix[i][k]
if k > 0 and k < n - 1:
Psx = matrix[i][k] + Path(i + 1, k - 1, n)
Pst = matrix[i][k] + Path(i + 1, k, n)
Pdx = matrix[i][k] + Path(i + 1, k + 1, n)
Memo[(i, k)] = min(min(Pdx, Pst), Psx)
return Memo[(i, k)]
else:
if k == 0:
Pst = matrix[i][k] + Path(i + 1, k, n)
Pdx = matrix[i][k] + Path(i + 1, k + 1, n)
Memo[(i, k)] = min(Pst, Pdx)
return Memo[(i, k)]
else:
Psx = matrix[i][k] + Path(i + 1, k - 1, n)
Pst = matrix[i][k] + Path(i + 1, k, n)
Memo[(i, k)] = min(Pst, Psx)
return Memo[(i, k)]
Min = 10**7
for k in range(0, len(matrix[0])):
CP = Path(0, k, len(matrix[0]))
if CP < Min:
Min = CP
return Min