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

(Leetcode 542)
两个相邻元素间的距离为 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,并将其中不为0的元素设置为整型最大值-666(防后续操作溢出)
2:先从左至右,从上至下比较,各元素此趟只与上和左元素作比较
3:第二趟从右至左,从下至上比较,各元素可与下和右元素作比较

此处分布讲解,最后有完整代码块

步骤1:
1:新建个局部变量矩阵复制实参矩阵,将其中不为0的元素设置为整型最大值-666(防后续操作溢出)

  public int[][] updateMatrix(int[][] matrix) {int row=matrix.length;//行int col=matrix[0].length;//列int[][] temp=new int[row][col];for(int i=0;i<row;i++)for(int j=0;j<col;j++){//给矩阵赋初值if(matrix[i][j]==0)temp[i][j]=0;elsetemp[i][j]=Integer.MAX_VALUE-666;}

2:先从左至右,从上至下,各元素此趟只与上和左元素作比较

for(int i=0;i<row;i++)
for(int 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若小则取之    }

3:第二趟从右至左,从下至上,各元素可与下和右元素作比较

 for(int i=row-1;i>=0;i--)for(int 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若小则取之    }

完整类在下方代码块

class Solution {public int[][] updateMatrix(int[][] matrix) {//步骤一int row=matrix.length;//行int col=matrix[0].length;//列int[][] temp=new int[row][col];for(int i=0;i<row;i++)for(int j=0;j<col;j++){//给矩阵赋初值if(matrix[i][j]==0)temp[i][j]=0;elsetemp[i][j]=Integer.MAX_VALUE-666;}//步骤二for(int i=0;i<row;i++)for(int 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若小则取之    }//步骤三for(int i=row-1;i>=0;i--)for(int 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若小则取之    }return temp;}}

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

  1. 给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3 ...

  2. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    署名:csdn等网站博客copy产出,AI时代知识新搬运工 言归正传:写下这道题的个人理解 题干: 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的 ...

  3. 对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?

    对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串? 比如["ABC", "ACB", &quo ...

  4. 搜寻吉祥数,在给定的范围内,例如1~99999,找出吉祥数字,满足的条件为:全部数字必须由6或者8构成,如66666,66668,668,…

    题目:在给定的范围内,例如1~99999,找出吉祥数字,满足的条件为:全部数字必须由6或者8构成,如66666,66668,668,- 1.一开始想的很杂,考虑了效率:把要查找的数转化成String再 ...

  5. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小

    7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则返回最小的下标) 题目 题目描述 ...

  6. Java黑皮书课后题第7章:7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值

    7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值 题目 题目描述与运行示例 破题 代码 ...

  7. 小球称重的解法整合 N个小球有一个坏球,最少几次能找出坏球

    小球称重的解法整合 N个小球有一个坏球,最少几次能找出坏球     最近在看小球称重的问题,之前只记住了公式,最近回过来看,发现知乎上多了一些优质答案,遂记录一下. 现附上学习地址 先说结论, N 个 ...

  8. 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

    写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...

  9. 实验4.1对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 。 要求: 1)数组有10个元素; 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息; 3)输出时,首先输出数组

    /*SY4.1 题目描述 对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 . 要求: 1)数组有10个元素: 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息: 3)输出 ...

最新文章

  1. VsCode 开发工具中英文切换
  2. 租用的服务器CPU使用率高的原因分析与解决办法
  3. 程序 峰谷值 提取_医学影像组学特征值(Radiomics Features)提取之Pyradiomics(一)理论篇...
  4. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)
  5. 7张图讲透Java垃圾回收算法!学妹直呼666!!!
  6. 数据挖掘--挖掘建模-时序模式-ARIMA模型
  7. Github出现连接超时
  8. B~树(B-Tree)与B+树
  9. python数据持久存储:pickle模块的基本使用
  10. ACER微型计算机支持MSATA,宏基S7超级本惊现双主控mSATA SSD 速度近900MB/s
  11. 模型预测控制(MPC)简介
  12. c语言发生错误文件无效或损坏,VC2010编译时提示:转换到 COFF 期间失败: 文件无效或损坏...
  13. (超详细)张正友标定法原理及公式推导
  14. iOS开发 处理置顶聊天的功能
  15. ios键盘弹起页面被顶上去的问题
  16. 将投影矩阵P利用QR分解分解出摄像机内外参数(Opencv)
  17. JAVA通过auth_code获取支付宝账户信息
  18. 计算机教师教育笔记,信息技术教师的读书笔记
  19. NATAPP内网穿透工具使用说明
  20. RabbitMQ-客户端源码之ChannelN

热门文章

  1. WEB 2.0中AJAX应用的详细探讨
  2. python爬取豆瓣排名前250部电影封面
  3. 计算机毕业设计ssm古诗词知识学习系统q5697系统+程序+源码+lw+远程部署
  4. 美工跟程序员合作应该注意哪些问题?
  5. SeetaFace编译使用 中科院人脸识别SDK
  6. 感人至深的 DB:帮助 probability map 更好地学习(training)却在功成之后(inference)退隐
  7. 使用PYTHON绘制直流电机和交流电机机固有械特性曲线
  8. 【动画展示】Focusky教程 | 添加logo
  9. 7 款颜值超高的 Linux 操作系统,我必须分享给你!
  10. 向锦华北京个人演唱会倾情上演,用歌声唱出音乐梦想