刷题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。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。
重难点
- 如果此元素为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;
};

浙公网安备 33010602011771号