542. 01 Matrix

Difficulty:
Related Topics:
Similar Questions:

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:

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: