一、题目

编写一种算法,若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]。具体如下图所示:

确定好了rowsOfZerocolumnsOfZero之后,我们再去遍历这两个数组,只要发现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. 零矩阵(难度:中等)相关推荐

  1. 【Leetcode】面试题 01.08. 零矩阵(Zero Matrix)

    一.题目 编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零. 二.示例 三.解法 解法-辅助空间 #时间:O(n^2) #空间:O(n^2) class Solution:def ...

  2. 程序员面试金典 - 面试题 01.08. 零矩阵

    1. 题目 编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零. 示例 1: 输入: [[1,1,1],[1,0,1],[1,1,1] ] 输出: [[1,0,1],[0,0,0], ...

  3. 力扣面试题 01.08. 零矩阵

    编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零 代码一思路: 第一次遍历时记录,用两个布尔类型数组标记行和列中是否有0元素: 第二次遍历时置零 class Solution {p ...

  4. Leetcode 面试题 01.06.字符串压缩(Compress String LCCI)

    Leetcode 面试题 01.06.字符串压缩 1 题目描述(Leetcode题目链接)   字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串aabccccc ...

  5. LeetCode 面试题 01.06. 字符串压缩 (双指针)

    面试题 01.06. 字符串压缩 题意: 压缩字符串,如:"aabbccc"压缩为"a2b2c3",如果压缩后的字符串长度大于等于原字符串,则返回原来的字符串. ...

  6. Leetcode 面试题 01.01. 判定字符是否唯一 (每日一题 20211012)

    实现一个算法,确定一个字符串 s 的所有字符是否全都不同.示例 1:输入: s = "leetcode" 输出: false 示例 2:输入: s = "abc" ...

  7. leetcode —— 面试题 17.08. 马戏团人塔

    有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点.已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人. 示例: ...

  8. 2022-3-29 Leetcode 面试题01.插入

    第一版,会溢出 class Solution {public:int insertBits(int N, int M, int i, int j) {int ret = 0;for(long long ...

  9. leetcode面试题 17.08. 马戏团人塔(二分法)

    有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点.已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人. 示例: ...

最新文章

  1. 每日一皮:2020年度最佳微小说...
  2. 如何安装和使用RAutomation
  3. Android列表视图(List View)
  4. 基于Xml 的IOC 容器-向容器注册
  5. 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
  6. 聊聊excel生成图片的几种方式
  7. Sharding-JDBC简介_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记006
  8. 目不给视的拼音及解释
  9. js reduce实现中间件_简述 laravel中间件 的原理
  10. android(安卓)开源框架——六款【转】
  11. 赤兔oracle恢复软件 收费,赤兔Oracle数据库恢复软件 v11.6
  12. 【预测模型】基于粒子群算法优化最小二乘支持向量机lssvm实现预测附matlab源码
  13. Java中 Tomcat 是干什么的?
  14. SQL中MINUS的用法
  15. 大学生职业规划8000字_大一职业规划书8000字
  16. 阿里云服务(一)—ECS和VPC
  17. EVE-NG 使用xshell
  18. Dalvik 指令学习
  19. 腾讯手游助手王者服务器,腾讯手游助手王者荣耀正在定位无法进入的解决教程...
  20. 定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y),求两点间的距离

热门文章

  1. 用powershell完整输出计算机硬件信息
  2. UG模具设计之注塑模具设计的原则及要求
  3. 2020人口普查能否问公民身份?美政府请最高法裁决
  4. Java基础:家庭记账程序
  5. java流水号生成规则(固定位数,先通过数字生成,数字用完字母生成)
  6. 写一个专利管理系统软件
  7. 2192. 有向无环图中一个节点的所有祖先(邻接表 加 拓扑排序)
  8. 独特的IPv4迁移至IPv6的测试网站
  9. 「产品篇」分账系统是如何设计的?
  10. python如何在前面加井_python入门之井字棋小游戏