【leetcode hot 100 73】矩阵置零

解法一:(使用两个标记变量)用矩阵的第一行和第一列代替方法一中的两个标记数组(col、row :第几列、行出现0),以达到 O(1) 的额外空间。

  • 这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。
  • 在实际代码中,我们首先预处理出两个标记变量,接着使用其他行与列去处理第一行与第一列,然后反过来使用第一行与第一列去更新其他行与列,最后使用两个标记变量更新第一行与第一列即可。
java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int m=matrix.length, n=matrix[0].length;
        boolean row=false, col=false;

        // 判断第一行有没有0
        for(int i=0; i<n; i++){
            if(matrix[0][i]==0){
                row=true;
            }
        }

        // 判断第一列有没有0
        for(int i=0; i<m; i++){
            if(matrix[i][0]==0){
                col=true;
            }
        }

        // 判断数组中是否有0 -> ij都是从1开始
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[i][j]==0){
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
        }

        // 第一行出现0的列+第一列出现0的行=0 -> ij都是从1开始
        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][0]==0或者matrix[0][j]==0,则matrix[i][j]==0
                    matrix[i][j]=0; 
                }
            }
        }

        // 判断第一行第一列是否需要置零
        if(row){
            for(int i=0;i<n;i++){
                matrix[0][i]=0;
            }
        }
        if(col){
            for(int i=0;i<m;i++){
                matrix[i][0]=0;
            }
        }
    }
}

注意:

  • 同时涉及到ij时,ij都是从1开始 -> 只处理除了第一行和第一列的数
相关推荐
高亦真3 分钟前
今天是学习嵌入式的第31天
linux·学习·算法
圣保罗的大教堂3 分钟前
leetcode 3720. 大于目标字符串的最小字典序排列 中等
leetcode
让学习成为一种生活方式13 分钟前
黄花蒿LHC基因家族的串联重复驱动扩张及其UV-B胁迫适应性--BMC Plant Biology
人工智能·算法·机器学习
ECT-OS-JiuHuaShan21 分钟前
共轭互逆链路论,彻底打击庸俗辩证法和不可知论
数据库·人工智能·算法·机器学习·数学建模
薛定e的猫咪23 分钟前
【大模型量化】使用 llama.cpp 完成量化、本地推理与服务化部署
人工智能·深度学习·算法·llama
薛定e的猫咪28 分钟前
【源码解读版】ContraBAR:用 CPC 对比学习替代变分推断做贝叶斯元 RL
人工智能·深度学习·学习·算法·机器学习
绿算技术1 小时前
大模型本地化的经济账:DeepSeek V4 Flash 部署实测
人工智能·科技·算法·spark
翟天保Steven1 小时前
用于提升CBCT低对比度组织分辨率的三维图像后处理方法
算法·计算机视觉·图像重建·图像后处理
FII工业富联科技服务1 小时前
GW级AI数据中心怎么建?Omniverse、CFD、液冷与BMS技术路径拆解
服务器·人工智能·算法·能源·制造
roman_日积跬步-终至千里2 小时前
【算法五】从斐波那契到动态规划:自顶向下、自底向上与状态压缩
算法·动态规划