图解LeetCode——面试题 01.08. 零矩阵(难度:中等)
一、题目
编写一种算法,若M
× N
矩阵中某个元素为0
,则将其所在的行与列清零。
二、示例
2.1> 示例1
【输入】
[[1,1,1],
[1,0,1],
[1,1,1]]
【输出】
[[1,0,1],
[0,0,0],
[1,0,1]]
2.2> 示例2
【输入】
[[0,1,2,0],
[3,4,5,2],
[1,3,1,5]]
【输出】
[[0,0,0,0],
[0,4,5,0],
[0,3,1,0]]
三、解题思路
根据题目描述,给我们一个矩阵M * N,需要将某个元素为0
的行和列都清零,那么,我们首先创建两个数组:
int[] rowsOfZero:用于存储元素值
等于0
的行的集合,数组长度为M,默认元素值都是0
;
int[] columnsOfZero:用于存储元素值等于0
的列的集合,数组长度为N,默认元素值都是0
;
然后,我们就遍历入参matrix
矩阵,找到元素值等于0的元素,然后将其行号
&列号
对应到上面的两个数组,并将其修改为1。我们以下图为例,遍历下图中的矩阵,我们找到了[0, 0]
和[0, 3]
这两个元素的值等于0,那么这两个元素对应的行号都是:0,对应的列号分别是:0和3。那么,映射到上面提到的两个数组,就变成了:rowsOfZero=[1, 0, 0]
和 columnsOfZero=[1, 0, 0, 1]
。具体如下图所示:
确定好了rowsOfZero
和columnsOfZero
之后,我们再去遍历这两个数组,只要发现rowsOfZero[i] == 1 或者colunmsOfZero[j] == 1,那么我们就可以将元素[i, j]
赋值为0。具体操作如下图所示:
下面的两种实现方式,其实主要就在于采用哪种数据结构去存储行等于0的集合(rowsOfZero
)以及列等于0的集合(columnsOfZero
)。具体请见如下两种代码实现。
四、代码实现
4.1> 实现1:采用数组结构
class Solution {public void setZeroes(int[][] matrix) {int[] rowsOfZero = new int[matrix.length], colunmsOfZero = new int[matrix[0].length];for (int i = 0; i < matrix.length; i++) for (int j = 0; j < matrix[i].length; j++) if (matrix[i][j] == 0) rowsOfZero[i] = colunmsOfZero[j] = 1;for (int i = 0; i < rowsOfZero.length; i++) for (int j = 0; j < colunmsOfZero.length; j++) if (rowsOfZero[i] == 1 || colunmsOfZero[j] == 1) matrix[i][j] = 0;}
}
4.2> 实现2:采用Set结构
class Solution {public void setZeroes(int[][] matrix) {Set<Integer> rowsOfZero = new HashSet(), colunmsOfZero = new HashSet();for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {if (matrix[i][j] == 0) {rowsOfZero.add(i);colunmsOfZero.add(j);}}}for (Integer row : rowsOfZero) {for (int i = 0; i < matrix[row].length; i++) {matrix[row][i] = 0;}}for (Integer colunm : colunmsOfZero) {for (int i = 0; i < matrix.length; i++) {matrix[i][colunm] = 0;}}}
}
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」
图解LeetCode——面试题 01.08. 零矩阵(难度:中等)相关推荐
- 【Leetcode】面试题 01.08. 零矩阵(Zero Matrix)
一.题目 编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零. 二.示例 三.解法 解法-辅助空间 #时间:O(n^2) #空间:O(n^2) class Solution:def ...
- 程序员面试金典 - 面试题 01.08. 零矩阵
1. 题目 编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零. 示例 1: 输入: [[1,1,1],[1,0,1],[1,1,1] ] 输出: [[1,0,1],[0,0,0], ...
- 力扣面试题 01.08. 零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零 代码一思路: 第一次遍历时记录,用两个布尔类型数组标记行和列中是否有0元素: 第二次遍历时置零 class Solution {p ...
- Leetcode 面试题 01.06.字符串压缩(Compress String LCCI)
Leetcode 面试题 01.06.字符串压缩 1 题目描述(Leetcode题目链接) 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串aabccccc ...
- LeetCode 面试题 01.06. 字符串压缩 (双指针)
面试题 01.06. 字符串压缩 题意: 压缩字符串,如:"aabbccc"压缩为"a2b2c3",如果压缩后的字符串长度大于等于原字符串,则返回原来的字符串. ...
- Leetcode 面试题 01.01. 判定字符是否唯一 (每日一题 20211012)
实现一个算法,确定一个字符串 s 的所有字符是否全都不同.示例 1:输入: s = "leetcode" 输出: false 示例 2:输入: s = "abc" ...
- leetcode —— 面试题 17.08. 马戏团人塔
有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点.已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人. 示例: ...
- 2022-3-29 Leetcode 面试题01.插入
第一版,会溢出 class Solution {public:int insertBits(int N, int M, int i, int j) {int ret = 0;for(long long ...
- leetcode面试题 17.08. 马戏团人塔(二分法)
有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点.已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人. 示例: ...
最新文章
- 每日一皮:2020年度最佳微小说...
- 如何安装和使用RAutomation
- Android列表视图(List View)
- 基于Xml 的IOC 容器-向容器注册
- 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
- 聊聊excel生成图片的几种方式
- Sharding-JDBC简介_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记006
- 目不给视的拼音及解释
- js reduce实现中间件_简述 laravel中间件 的原理
- android(安卓)开源框架——六款【转】
- 赤兔oracle恢复软件 收费,赤兔Oracle数据库恢复软件 v11.6
- 【预测模型】基于粒子群算法优化最小二乘支持向量机lssvm实现预测附matlab源码
- Java中 Tomcat 是干什么的?
- SQL中MINUS的用法
- 大学生职业规划8000字_大一职业规划书8000字
- 阿里云服务(一)—ECS和VPC
- EVE-NG 使用xshell
- Dalvik 指令学习
- 腾讯手游助手王者服务器,腾讯手游助手王者荣耀正在定位无法进入的解决教程...
- 定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y),求两点间的距离