Rayman的绝顶之路——Leetcode每日一题打卡1
Leetcode542. 01 矩阵 题目:
给定一个由 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,1二维数组,创建一个与该二维数组一样大小的二维数组并初始化,初始化时对该二维数组原本为0的地方设为0,原本有数字的地方设为一个最大值(上限+1)
- 然后进行第一次遍历,从左到右、从上到下重新赋值;
- 然后进行第二次遍历,从右到左、从下到上重新赋值。
具体代码实现如下所示:
import java.util.Arrays;public class Leetcode542_01 {static class Solution {int[][] updateMatrix(int[][] matrix) {if (matrix == null || matrix.length == 0) return null;int m = matrix.length, n = matrix[0].length;int[][] res = new int[m][n];//初始化for (int i = 0; i < m; i++) {Arrays.fill(res[i], 10001);}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == 0) res[i][j] = 0;}}//动态规划//从左到右、从上到下重新赋值for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i - 1 >= 0) {res[i][j] = Math.min(res[i][j], res[i - 1][j] + 1);}if (j - 1 >= 0) {res[i][j] = Math.min(res[i][j], res[i][j - 1] + 1);}}}//从右到左、从下到上重新赋值for (int i = m - 1; i >= 0; i--) {for (int j = n - 1; j >= 0; j--) {if (i + 1 < m) {res[i][j] = Math.min(res[i][j], res[i + 1][j] + 1);}if (j + 1 < n) {res[i][j] = Math.min(res[i][j], res[i][j + 1] + 1);}}}return res;}}public static void main(String[] args) {Solution solution = new Solution();int[][] a = {{0, 0, 0},{0, 1, 0},{1, 1, 1}};int[][] b = solution.updateMatrix(a);for (int i = 0; i < b.length; i++) {for (int j = 0; j < b[0].length; j++) {System.out.print(b[i][j] + " ");}System.out.println();}}
}
2020.4.15打卡
Rayman的绝顶之路——Leetcode每日一题打卡1相关推荐
- LeetCode每日一题打卡组队监督!刷题群!
近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...
- 关于LeetCode每日一题打卡失败的感悟
背景 今年5月,报名参加了三叶姐的"五月打卡活动",押金29.9元,要求每天在力扣上每日一题打卡,完成则押金全退,完不成则押金不退. 事件 2022.5.10,LeetCode上的 ...
- Leetcode每日一题(914. 卡牌分组)
914. 卡牌分组 题目: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数 ...
- LeetCode 每日一题打卡:334.递增的三元子序列
题目 334.递增的三元子序列 题目大意 给你一个整数数组numsnumsnums ,判断这个数组中是否存在长度为333的递增子序列. 如果存在这样的三元组下标(i,j,k)(i, j, k)(i,j ...
- 【Leetcode 每日一题】514. 自由之路(BFS+优先队列)
Leetcode 每日一题 题目链接:514. 自由之路 难度: 困难 解题思路: 这道题乍一看,可以选择用动态规划或者BFS来求解.本文使用BFS来进行解答.注意到题中有一个最小的到路径.所以我们可 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
最新文章
- bootstrap 栅栏系统
- 【杂谈】2020年如何长期、系统,全面地学习深度学习和计算机视觉,这是有三AI的完整计划...
- Linux动态频率调节系统CPUFreq
- 【职场】聊聊P5晋升P6之后
- VTK:InfoVis之DelimitedTextWriter
- PHP版本区别5与7:性能 64位 运算符 输入类型 返回类型 匿名类;7改进1.变量存储空间2.数组结构3.函数调用机制
- (2015-12-09)java.util.Arrays的用法
- python数据可视化代码_python数据可视化
- 形参与实参在函数中的传递
- 蔡高厅老师 - 高等数学阅读笔记 - 07 - 函数的微分 - 微分中值定理 罗尔、拉格朗日中值定理 (31、32、33、34、35)
- 据说,上次获奖的同学拿了奖金泡了班花还get到了2个offer
- 21世纪的文件系统:概述WindowsNT 5.0文件系统(NTFS)(三)
- Ubuntu Qt 无法覆盖文件 错误解决方法
- Shell cace条件语句
- 好心情患者故事:节食暴食反复横跳,我确诊了重度抑郁
- 怎样把m4a转换mp3格式?
- css(五)项目实战,ps切图
- 海思SD3403/SS928开发(三)红外DC接入
- 急!!!微信公众号数据迁移后openid无法转换
- 2022 前端一场面试及答案整理