【LeetCode-中等题】73. 矩阵置零

题目

题解一:使用标记数组

java 复制代码
public void setZeroes(int[][] matrix) {
    int m = matrix.length;
    int n = matrix[0].length;
        boolean[] row = new boolean[m];
        boolean[] col = new boolean[n];
    for(int i=0; i< m;i++){
        for(int j = 0;j<n;j++){
           if (matrix[i][j] == 0) 
             row[i]=col[j]=true;//将这一行和这一列的数据设为true
        }
    }
    
      for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (row[i] || col[j]) {     //若行列任意为true  直接将对应的行列位置对应的值设为0
                    matrix[i][j] = 0;
                }
            }
        }
    }

题解二:使用临时数组,使用两个标记变量(使用0行0列作为临时标记数组)

参考链接:614,矩阵置零

  1. 先设置两个boolean 变量来判断第一行第一列临时数组是否存在0,存在0,说明第一列或第一行要全体置0

  2. 先遍历矩阵,将出现0的位置的第一行第一列置为0,后续可以根据第一行或列是否为0,来将对应的行或列全体置为0

  3. 根据第一行第一列的置0行列,来将全体矩阵对应的列和行置为0(不能动第一行,因为本身就是将第一行和列作为标0位,不能改变)

  4. 最后根据两个boolean来判断第一行或第一列是否出现了0,出现了就将第一行或第一列置为0(根据标志符处理第一行或列).

java 复制代码
  public void setZeroes(int[][] matrix) {
            int m = matrix.length;
            int n = matrix[0].length;

            boolean row = false;
            boolean col = false;
        for(int i = 0 ; i< m; i++){
            for(int j = 0 ; j< n ; j++){
               if(matrix[i][j]==0){
                   //如果第一行或者第一列本来就有0,就把他标记一
                   //下,最后再把第一行或者第一列全部置为0
                   if(i==0) row = true;
                   if(j==0) col = true;
                //把最上面一行和最左边一列对应的位置标注为0
                    matrix[i][0] =0;
                    matrix[0][j] =0;
               }

            }
        }
        //把那些应该为0的行和列全部置为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;
                 }
            }
         //如果第一行本来就有0,把第一行全部变为0
        if(row){
            for(int i = 0;i<n;i++){
                matrix[0][i] =0;
            }
        }

        //如果第一列本来就有0,把第一列全部变为0
         if(col){
            for(int i = 0;i<m;i++){
                matrix[i][0] =0;
            }
        }
    }
相关推荐
时艰.1 分钟前
JVM 垃圾收集器ParNew&CMS与三色标记算法
java·jvm·算法
zy_destiny3 分钟前
SegEarth-OV系列(二):面向遥感图像的无训练开放词汇分割
人工智能·深度学习·算法·机器学习·计算机视觉·语义分割·开放词汇
Coovally AI模型快速验证18 分钟前
Meta ShapeR重磅开源:多模态3D生成,从真实杂乱视频中稳健重建
人工智能·学习·算法·yolo·3d·人机交互
码农水水28 分钟前
美团Java面试被问:Netty的ByteBuf引用计数和内存释放
java·开发语言·数据库·mysql·算法·面试·职场和发展
zl_vslam42 分钟前
SLAM中的非线性优-3D图优化之绝对位姿SE3约束SO3/t形式(十八)
人工智能·算法·计算机视觉·3d
啊阿狸不会拉杆42 分钟前
《计算机操作系统》 - 第九章 操作系统接口
人工智能·算法·计算机组成原理·os·计算机操作系统
一起养小猫43 分钟前
Flutter for OpenHarmony 实战:碰撞检测算法与游戏结束处理
算法·flutter·游戏
刃神太酷啦44 分钟前
Linux 基础 IO 收官:库的构建与使用、进程地址空间及核心知识点全解----《Hello Linux!》(11)
java·linux·c语言·数据库·c++·算法·php
板面华仔44 分钟前
机器学习入门(一)——KNN算法
人工智能·算法·机器学习
Three~stone1 小时前
Matlab R2024b 保姆级安装教程(附:解决win10问题)
开发语言·算法·matlab