01 Matrix(DP)
Input:
[[0,0,0],
[0,1,0],
[0,0,0]]
Output:
[[0,0,0],
[0,1,0],
[0,0,0]]Input:
[[0,0,0],
[0,1,0],
[1,1,1]]
Output:
[[0,0,0],
[0,1,0],
[1,2,1]]Last updated
Input:
[[0,0,0],
[0,1,0],
[0,0,0]]
Output:
[[0,0,0],
[0,1,0],
[0,0,0]]Input:
[[0,0,0],
[0,1,0],
[1,1,1]]
Output:
[[0,0,0],
[0,1,0],
[1,2,1]]Last updated
class Solution:
def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
if not matrix or not matrix[0]:
return[]
n,m = len(matrix),len(matrix[0])
rr = n*m
res = [[float('inf')]*m for _ in range(n)]
for x in range(n):
for y in range(m):
if matrix[x][y] == 0:
res[x][y] = 0
else:
up = res[x][y-1] if y-1 >=0 else rr
left = res[x-1][y] if x-1>=0 else rr
res[x][y] = min(up,left) + 1
for x in reversed(range(n)):
for y in reversed(range(m)):
if matrix[x][y] == 0:
res[x][y] = 0
else:
down =res[x][y+1] if y+1<m else rr
right =res[x+1][y] if x+1<n else rr
res[x][y] = min(down+1,right+1,res[x][y])
return resclass Solution:
def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
if not matrix or not matrix[0]:
return[]
n,m = len(matrix),len(matrix[0])
rr = n*m
res = [[rr]*m for _ in range(n)]
q = [(x,y,0) for x in range(n) for y in range(m) if matrix[x][y] == 0]
while q:
x,y,d = q.pop(0)
if res[x][y]!=rr:
continue
res[x][y] = d
if x+1<n:
q.append((x+1,y,d+1))
if y + 1 < m:
q.append((x,y+1,d+1))
if x-1>=0:
q.append((x-1,y,d+1))
if y - 1 >=0:
q.append((x,y-1,d+1))
return res