542. 01 Matrix
Đề Bài
Given an m x n binary matrix mat, return the distance of the nearest 0 for each cell.
The distance between two adjacent cells is 1.
Example 1:
Input: mat = [[0,0,0],[0,1,0],[0,0,0]] Output: [[0,0,0],[0,1,0],[0,0,0]]
Example 2:
Input: mat = [[0,0,0],[0,1,0],[1,1,1]] Output: [[0,0,0],[0,1,0],[1,2,1]]
Constraints:
m == mat.lengthn == mat[i].length1 <= m, n <= 1041 <= m * n <= 104mat[i][j]is either0or1.- There is at least one
0inmat.
Thuật Toán & Kỹ Thuật
⏱️ Thời gian
O(n²)
💾 Không gian
O(n)
Lời Giải
Python
0542-01-matrix.py
class Solution:
def updateMatrix(self, mat: List[List[int]]) -> List[List[int]]:
r, c = len(mat), len(mat[0])
dq = deque([])
for i in range(r):
for j in range(c):
if mat[i][j] == 0:
dq.append((i, j))
else:
mat[i][j] = -1
DIR = [-1, 0, 1, 0, -1]
while dq:
n = len(dq)
x, y = dq.popleft()
for i in range(4):
xx = x + DIR[i]
yy = y + DIR[i + 1]
if 0 <= xx < r and 0 <= yy < c and mat[xx][yy] == -1:
dq.append((xx, yy))
mat[xx][yy] = mat[x][y] + 1
return mat