前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode】#542.01 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离

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

原创
作者头像
微芒不朽
发布2022-04-28 17:00:30
8920
发布2022-04-28 17:00:30
举报
文章被收录于专栏:前端进阶-詹躲躲
题目描述:

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

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

代码语言:javascript
复制
示例 1:
输入:

0 0 0
0 1 0
0 0 0
代码语言:javascript
复制
输出:

0 0 0
0 1 0
0 0 0
代码语言:javascript
复制
示例 2:
输入:

0 0 0
0 1 0
1 1 1
代码语言:javascript
复制
输出:

0 0 0
0 1 0
1 2 1

注意:

给定矩阵的元素个数不超过 10000。

给定矩阵中至少有一个元素是 0。

矩阵中的元素只在四个方向上相邻: 上、下、左、右。

一、创建矩阵

示例:创建一个根据行列,创建数组,并填入数字;

代码语言:txt
复制
let col = 3; //列数
代码语言:txt
复制
let row = 3; //行数
代码语言:txt
复制
let matrix = []; //创建一个数组存储空间
代码语言:txt
复制
let num = 1;  //填入的值
代码语言:txt
复制
for(let i=0;i<row;i++){
代码语言:txt
复制
	matrix[i] = [];  //创建三维数组行空间
代码语言:txt
复制
	for(let j=0;j<col;j++){
代码语言:txt
复制
	    matrix[i][j]=num; //填入数字
代码语言:txt
复制
 	    num++; 
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:javascript
复制
输出:
[
    [1,2,3],
    [4,5,6],
    [7,8,9],
]

一、实参替换形参中不为0的值,保留为0的值

代码语言:txt
复制
//实参替换形参中不为0的值,保留为0的值
var updateMatrix = function(matrix) {
        let row = matrix.length; //获取矩阵的行数
        let col = matrix[0].length; //获取矩阵的列	
	var temp = [];//创建一个数组存储空间
	for(var i = 0; i < row; i++){
	    temp[i] = [];
		for(var j = 0 ; j < col; j++){
		  if (matrix[i][j] == 0) {
			temp[i][j] = 0;
		  }else{
			temp[i][j] = Number.MAX_SAFE_INTEGER; //值过大防止内存溢出
	      }
	   }
    }
}

输出:

代码语言:txt
复制
[
代码语言:txt
复制
	[0,0,0],
代码语言:txt
复制
	[0,9007199254740991,0],
代码语言:txt
复制
	[9007199254740991,9007199254740991,9007199254740991],
代码语言:txt
复制
	[9007199254740991,9007199254740991,9007199254740991],
代码语言:txt
复制
]

二、根据实参矩阵修改矩阵中为0的值

2.1此时从左至右从上至下,各元素只与上左元素作比较
代码语言:javascript
复制
for (var i = 0; i < row; i++){
	for (var j = 0; j < col; j++){ //此时从左至右从上至下,各元素只与上左元素作比较
		if (j > 0)
			temp[i][j] = Math.min(temp[i][j - 1] + 1, temp[i][j]); //左边元素加1若小则取之
		if (i > 0)
			temp[i][j] = Math.min(temp[i - 1][j] + 1, temp[i][j]); //上边元素加1若小则取之    
	}
}

输出:

代码语言:txt
复制
 [
    [ 0, 0, 0 ],
    [ 0, 1, 0 ],
    [ 1, 2, 1 ],
    [ 2, 3, 2 ]  
]
2.2 此时从右至左从下至上,各元素可与下右元素作比较
代码语言:javascript
复制
for (var i = row - 1; i >= 0;i--){
	for (var j = col - 1; j >= 0; j--) { //此时从右至左从下至上,各元素可与下右元素作比较
		if (j < col - 1)
			temp[i][j] = Math.min(temp[i][j + 1] + 1, temp[i][j]); //左边元素加1若小则取之
		if (i < row - 1)
			temp[i][j] = Math.min(temp[i + 1][j] + 1, temp[i][j]); //上边元素加1若小则取之    
	}
 }

输出

代码语言:txt
复制
    [
        [ 0, 0, 0 ],
        [ 0, 1, 0 ],
        [ 1, 2, 1 ],
        [ 2, 3, 2 ],
    ]
解题代码:
代码语言:txt
复制
var updateMatrix = function(matrix) {
代码语言:txt
复制
	//步骤一
代码语言:txt
复制
	let row = matrix.length; //获取矩阵的行数
代码语言:txt
复制
	let col = matrix[0].length; //获取矩阵的列
代码语言:txt
复制
	var temp = [];//创建一个数组存储空间
代码语言:txt
复制
	for(var i = 0; i < row; i++){
代码语言:txt
复制
		temp[i] = [];
代码语言:txt
复制
		for(var j = 0 ; j < col; j++){
代码语言:txt
复制
			if (matrix[i][j] == 0) {
代码语言:txt
复制
				temp[i][j] = 0;
代码语言:txt
复制
			}else{
代码语言:txt
复制
				/* 值过大防止内存溢出 */
代码语言:txt
复制
				temp[i][j] = Number.MAX_SAFE_INTEGER;
代码语言:txt
复制
			}
代码语言:txt
复制
		}
代码语言:txt
复制
	}
代码语言:txt
复制
	//步骤二
代码语言:txt
复制
	for (var i = 0; i < row; i++){
代码语言:txt
复制
		for (var j = 0; j < col; j++){ //此时从左至右从上至下,各元素只与上左元素作比较
代码语言:txt
复制
			if (j > 0)
代码语言:txt
复制
				/* 左边元素加1若小则取之 */
代码语言:txt
复制
				temp[i][j] = Math.min(temp[i][j - 1] + 1, temp[i][j]); 
代码语言:txt
复制
			if (i > 0)
代码语言:txt
复制
				/* 上边元素加1若小则取之 */
代码语言:txt
复制
				temp[i][j] = Math.min(temp[i - 1][j] + 1, temp[i][j]);    
代码语言:txt
复制
		}
代码语言:txt
复制
	}
代码语言:txt
复制
	//步骤三
代码语言:txt
复制
	for (var i = row - 1; i >= 0;i--){
代码语言:txt
复制
		for (var j = col - 1; j >= 0; j--) { //此时从右至左从下至上,各元素可与下右元素作比较
代码语言:txt
复制
			if (j < col - 1)
代码语言:txt
复制
				/* 左边元素加1若小则取之 */
代码语言:txt
复制
				temp[i][j] = Math.min(temp[i][j + 1] + 1, temp[i][j]); 
代码语言:txt
复制
			if (i < row - 1)
代码语言:txt
复制
				/* 上边元素加1若小则取之 */
代码语言:txt
复制
				temp[i][j] = Math.min(temp[i + 1][j] + 1, temp[i][j]);   
代码语言:txt
复制
		}
代码语言:txt
复制
	} 
代码语言:txt
复制
	return temp;
代码语言:txt
复制
};
```s=2665)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 一、创建矩阵
  • 一、实参替换形参中不为0的值,保留为0的值
  • 二、根据实参矩阵修改矩阵中为0的值
    • 2.1此时从左至右从上至下,各元素只与上左元素作比较
      • 2.2 此时从右至左从下至上,各元素可与下右元素作比较
        • 解题代码:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档