题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/01-matrix

题目描述

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。

示例 1:
输入:

0 0 0
0 1 0
0 0 0
输出:

0 0 0
0 1 0
0 0 0
示例 2:
输入:

0 0 0
0 1 0
1 1 1
输出:

0 0 0
0 1 0
1 2 1
注意:

给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。

重难点

  1. 如果此元素为0,那么距离为0;
  2. 查找放向可以从左、上、右、下进行遍历查找。

题目分析

  1. 定义和矩阵大小一致的二维数组dp,并赋初值Infinity:表示正无穷大的数值;
  2. 从矩阵左上角开始查找“0”,可以查找的方向为:右、下,当前元素若为0,那么距离为0,即dp为0;
  3. 从矩阵右下角开始查找“0”,可以查找的方向为:左、上。
  4. 返回dp。

 

/**
 * @param {number[][]} matrix
 * @return {number[][]}
 */
var updateMatrix = function(matrix) {
    let m = matrix.length;
    let n = matrix[0].length;
    let dp = new Array(m).fill(Infinity).map(() => new Array(n).fill(Infinity));
    //右下移动
    for(let i=0; i<m; i++){
        for(let j=0; j<n; j++){
            if(matrix[i][j] == 0) dp[i][j] = 0;
            else{
                if(i > 0) dp[i][j] = Math.min(dp[i-1][j]+1 , dp[i][j]);
                if(j > 0) dp[i][j] = Math.min(dp[i][j-1]+1 , dp[i][j]);
            }
        }
    }
    //左上移动
    for(let i=m-1; i>=0; i--){
        for(let j=n-1; j>=0; j--){
            if(i < m-1) dp[i][j] = Math.min(dp[i+1][j]+1 , dp[i][j]);
            if(j < n-1) dp[i][j] = Math.min(dp[i][j+1]+1 , dp[i][j]);   
        }
    }
    return dp;
};

  

相关文章:

  • 2021-08-01
  • 2021-07-31
  • 2021-07-13
  • 2021-11-05
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2021-04-09
猜你喜欢
  • 2021-08-26
  • 2021-08-15
  • 2021-06-18
  • 2022-12-23
  • 2021-09-22
  • 2021-08-09
相关资源
相似解决方案