542. 01 矩阵

122 阅读1分钟

542. 01 矩阵

数学归纳法得出:

f(i,j)=min[f(i1,j),f(i,j),f(i1,j),f(i1,j)]+1f(i,j) = min[f(i-1,j),f(i,j),f(i-1,j),f(i-1,j)] + 1

  • map(() => new Array(n).fill(Number.MAX_VALUE));建模
  • brr[i][j] = 0; 模型 复制 arr中的0
  • brr[i][j] = Math.min(brr[i][j], brr[i - 1][j] + 1);从上到下
  • brr[i][j] = Math.min(brr[i][j], brr[i][j - 1] + 1);从左到右
  • brr[i][j] = Math.min(brr[i][j], brr[i + 1][j] + 1);从右往左
  • brr[i][j] = Math.min(brr[i][j], brr[i][j + 1] + 1);从下往上
var updateMatrix = function (arr) {
    var m = arr.length;
    var n = arr[0].length;
    var brr = new Array(m)
        .fill(0)
        .map(() => new Array(n).fill(Number.MAX_VALUE));
    for (var i = 0; i < m; i++) {
        for (var j = 0; j < n; j++) {
            if (arr[i][j] == 0) {
                brr[i][j] = 0;
            }
        }
    }
    for (var i = 0; i < m; i++) {
        for (var j = 0; j < n; j++) {
            if (i - 1 >= 0) {
                brr[i][j] = Math.min(brr[i][j], brr[i - 1][j] + 1);
            }
            if (j - 1 >= 0) {
                brr[i][j] = Math.min(brr[i][j], brr[i][j - 1] + 1);
            }
        }
    }
    for (var i = m - 1; i >= 0; i--) {
        for (var j = n - 1; j >= 0; j--) {
            if (i + 1 < m) {
                brr[i][j] = Math.min(brr[i][j], brr[i + 1][j] + 1);
            }
            if (j + 1 < n) {
                brr[i][j] = Math.min(brr[i][j], brr[i][j + 1] + 1);
            }
        }
    }
    return brr;
};