leetcode 73. 矩阵置零
【摘要】 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2:
输入: [ [0,1,2,0], [3,4,5,2], [1,3...
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 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]
]
进阶:
一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?
思路:利用第一行和第一列记录这一行/列有没有0即可。
(但是要特殊照顾第一行和第一列)
-
class Solution {
-
public void setZeroes(int[][] matrix) {
-
int row = matrix.length;
-
int col = matrix[0].length;
-
boolean row0_flag = false;
-
boolean col0_flag = false;
-
// 第一行是否有零
-
for (int j = 0; j < col; j++) {
-
if (matrix[0][j] == 0) {
-
row0_flag = true;
-
break;
-
}
-
}
-
// 第一列是否有零
-
for (int i = 0; i < row; i++) {
-
if (matrix[i][0] == 0) {
-
col0_flag = true;
-
break;
-
}
-
}
-
// 把第一行第一列作为标志位
-
for (int i = 1; i < row; i++) {
-
for (int j = 1; j < col; j++) {
-
if (matrix[i][j] == 0) {
-
matrix[i][0] = matrix[0][j] = 0;
-
}
-
}
-
}
-
// 置0
-
for (int i = 1; i < row; i++) {
-
for (int j = 1; j < col; j++) {
-
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
-
matrix[i][j] = 0;
-
}
-
}
-
}
-
-
if (row0_flag) {
-
for (int j = 0; j < col; j++) {
-
matrix[0][j] = 0;
-
}
-
}
-
if (col0_flag) {
-
for (int i = 0; i < row; i++) {
-
matrix[i][0] = 0;
-
}
-
}
-
}
-
}
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/104085375
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)