leetcode73.矩阵置零

方法一:采用两个数组,行数组记录哪些行的所有元素需要全部置为0,列数组需要记录哪些列的所有元素需要全部置为0

java 复制代码
public class Solution {
    public void setZeroes(int[][] matrix) {
        boolean[] rowArr = new boolean[matrix.length];
        boolean[] colArr = new boolean[matrix[0].length];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if(matrix[i][j]==0){
                    rowArr[i]=true;
                    colArr[j]=true;
                }
            }
        }
        for (int i = 0; i < rowArr.length; i++)
            if(rowArr[i])
                for(int j=0;j<matrix[0].length;j++)
                    matrix[i][j]=0;
        for(int j=0;j<colArr.length;j++)
            if(colArr[j])
                for (int i = 0; i < matrix.length; i++)
                    matrix[i][j]=0;
    }
}

方法二:在方法一的基础上优化空间复杂度,用第一行和第一列代替方法一中的行数组和列数组,但是这样会导致第一行变动,结果错误,为此引入两个变量,一个记录第一行是否需要全部置为0,另一个记录第一列是否需要全部置为0

java 复制代码
public class Solution {
    public void setZeroes(int[][] matrix) {
        int m= matrix.length;
        int n=matrix[0].length;
        boolean rowZero=false,colZero=false;
        for (int[] ints : matrix) {
            if (ints[0] == 0) {
                colZero = true;
                break;
            }
        }
        for (int i = 0; i < n; i++) {
            if(matrix[0][i]==0){
                rowZero=true;
                break;
            }
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if(matrix[i][j]==0){
                    matrix[i][0]=0;
                    matrix[0][j]=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(rowZero)
            for (int i = 0; i < n; i++) {
                matrix[0][i]=0;
            }
        if(colZero)
            for (int i = 0; i < m; i++) {
                matrix[i][0]=0;
            }
    }
}
相关推荐
0xDevNull3 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
华科易迅3 小时前
MybatisPlus增删改查操作
android·java·数据库
standovon4 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
米粒14 小时前
力扣算法刷题 Day 27
算法·leetcode·职场和发展
IAUTOMOBILE4 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
hutengyi4 小时前
PostgreSQL版本选择
java
皮皮林5515 小时前
重磅!JetBrains 正式发布全新的 AI 开发工具,定名 AI IDE AIR
java·intellij idea
MX_93595 小时前
SpringMVC请求参数
java·后端·spring·servlet·apache
ID_180079054735 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
Fuxiao___5 小时前
C 语言核心知识点讲义(循环 + 函数篇)
算法·c#