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。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。
重难点
- 如果此元素为0,那么距离为0;
- 查找放向可以从左、上、右、下进行遍历查找。
题目分析
- 定义和矩阵大小一致的二维数组dp,并赋初值
Infinity:表示正无穷大的数值;
- 从矩阵左上角开始查找“0”,可以查找的方向为:右、下,当前元素若为0,那么距离为0,即dp为0;
- 从矩阵右下角开始查找“0”,可以查找的方向为:左、上。
- 返回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; };