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;
            }
        }
    }
}
相关推荐
你真是饿了10 小时前
算法专题二:滑动窗口
算法
ccLianLian10 小时前
数论·约数
数据结构·算法
会编程的土豆10 小时前
【数据结构与算法】最短路径---Dijkstra 算法
数据结构·c++·算法
2401_8796938710 小时前
C++中的观察者模式实战
开发语言·c++·算法
炽烈小老头10 小时前
【 每天学习一点算法 2026/03/24】寻找峰值
学习·算法
fff98111811 小时前
C++与Qt图形开发
开发语言·c++·算法
计算机安禾11 小时前
【数据结构与算法】第3篇:C语言核心机制回顾(二):动态内存管理与typedef
c语言·开发语言·数据结构·c++·算法·链表·visual studio
njidf11 小时前
C++中的访问者模式
开发语言·c++·算法
C_Si沉思12 小时前
C++中的工厂模式变体
开发语言·c++·算法
C羊驼12 小时前
C语言学习笔记(十五):预处理
c语言·经验分享·笔记·学习·算法