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: