刷题75——矩阵

114.矩阵

 题目链接

来源:力扣(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;
};

  

posted @ 2020-04-17 03:00  刘欣lx  阅读(103)  评论(0编辑  收藏  举报