73. 矩阵置零

可以选择遍历两遍matrix,一遍记录哪些行哪些列需要置0,一遍置0

O(1)空间复杂度的做法:

首先设置两个boolean型变量记录第0行和第0列是否需要置0

然后用第0行和第0列记录需要置0的行和列

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        boolean row0 = false, col0 = false;
        for (int j = 0; j < n; j++) {
            if (matrix[0][j] == 0) row0 = true;
        }
        for (int i = 0; i < m; i++) {
            if (matrix[i][0] == 0) col0 = true;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (matrix[i][j] == 0) matrix[0][j] = matrix[i][0] = 0;
            }
        }
        // set 0
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
            }
        }
        if (row0) {
            for (int j = 0; j < n; j++) {
                matrix[0][j] = 0;
            }
        }
        if (col0) {
            for (int i = 0; i < m; i++) {
                matrix[i][0] = 0;
            }
        }
    }
}
相关推荐
字节旅行者2 分钟前
C++中如何使用STL中的list定义一个双向链表,并且实现增、删、改、查操作
开发语言·数据结构·c++·链表
LLLLLindream15 分钟前
数据结构之链表
数据结构·链表
火车叼位28 分钟前
初中生也能懂的贝叶斯定理:拆解一个改变世界的公式
人工智能·数学·算法
ChoSeitaku31 分钟前
NO.66十六届蓝桥杯备战|基础算法-贪心-区间问题|凌乱的yyy|Rader Installation|Sunscreen|牛栏预定(C++)
c++·算法·蓝桥杯
用手码出世界36 分钟前
二叉树——队列bfs专题
数据结构·算法·宽度优先
OneQ6661 小时前
C++自学笔记---指针在数组遍历中的应用
c++·笔记·算法
EnigmaCoder1 小时前
蓝桥杯刷题周计划(第四周)
c++·算法·蓝桥杯
绿水毛怪.1 小时前
蓝桥杯基础算法-字符串与集合
算法·职场和发展·蓝桥杯
丶Darling.1 小时前
26考研 | 王道 | 数据结构 | 第五章 树
数据结构·考研
悄悄敲敲敲2 小时前
C++第14届蓝桥杯b组学习笔记
c++·学习·算法·蓝桥杯