Problem
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.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
mat[i][j]
is either0
or1
.There is at least one
0
inmat
.
Solution
/**
* @param {number[][]} mat
* @return {number[][]}
*/
var updateMatrix = function(mat) {
var arr = [];
var m = mat.length;
var n = mat[0].length;
var res = Array(m).fill(0).map(() => Array(n));
var mark = function(i, j, distance) {
if (mat[i] === undefined || mat[i][j] === undefined) return;
if (res[i][j] !== undefined) return;
arr.push([i, j]);
res[i][j] = distance;
};
for (var i = 0; i < m; i++) {
for (var j = 0; j < n; j++) {
mat[i][j] === 0 && mark(i, j, 0);
}
}
while (arr.length) {
var [i, j] = arr.shift();
mark(i - 1, j, res[i][j] + 1);
mark(i + 1, j, res[i][j] + 1);
mark(i, j - 1, res[i][j] + 1);
mark(i, j + 1, res[i][j] + 1);
}
return res;
};
Explain:
Breadth-first search.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).