1- class Solution :
2- def updateMatrix (self , A : List [List [int ]]) -> List [List [int ]]:
3- def validNeighbours (i , j , d ):
4- for dx , dy in (1 , 0 ), (- 1 , 0 ), (0 , 1 ), (0 , - 1 ):
5- ni , nj , dn = i + dx , j + dy , d + 1
6- if 0 <= ni < len (A ) and 0 <= nj < len (A [0 ]):
7- yield ni , nj , dn
8-
9- def bfs (i , j ):
10- dist = collections .defaultdict (lambda : float ('inf' ))
11- queue = collections .deque ([(i , j , 0 )])
12- while queue :
13- i , j , d = queue .popleft ()
14- if A [i ][j ] == 0 :
15- return d
16- for ni , nj , dn in validNeighbours (i , j , d ):
17- if dn < dist [(ni , nj )]:
18- dist [(ni , nj )] = dn
19- queue .append ((ni , nj , dn ))
20- return A [i ][j ]
21-
22-
23- for i in range (len (A )):
24- for j in range (len (A [0 ])):
25- if A [i ][j ] == 1 :
26- A [i ][j ] = bfs (i , j )
1+ class Solution :
2+ def updateMatrix (self , A : List [List [int ]]) -> List [List [int ]]:
3+ def validNeighbours (i , j , d ):
4+ for dx , dy in (1 , 0 ), (- 1 , 0 ), (0 , 1 ), (0 , - 1 ):
5+ ni , nj , dn = i + dx , j + dy , d + 1
6+ if 0 <= ni < len (A ) and 0 <= nj < len (A [0 ]):
7+ yield ni , nj , dn
8+
9+ def bfs (i , j ):
10+ dist = collections .defaultdict (lambda : float ('inf' ))
11+ queue = collections .deque ([(i , j , 0 )])
12+ while queue :
13+ i , j , d = queue .popleft ()
14+ if A [i ][j ] == 0 :
15+ return d
16+ for ni , nj , dn in validNeighbours (i , j , d ):
17+ if dn < dist [(ni , nj )]:
18+ dist [(ni , nj )] = dn
19+ queue .append ((ni , nj , dn ))
20+ return A [i ][j ]
21+
22+
23+ for i in range (len (A )):
24+ for j in range (len (A [0 ])):
25+ if A [i ][j ] == 1 :
26+ A [i ][j ] = bfs (i , j )
2727 return A
0 commit comments