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;
            }
    }
}
相关推荐
Jay Kay几秒前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Mr_sun.2 分钟前
Day09——入退管理-入住-2
android·java·开发语言
Epiphany.55612 分钟前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
MAGICIAN...13 分钟前
【java-软件设计原则】
java·开发语言
JH307320 分钟前
为什么switch不支持long
java
YuTaoShao35 分钟前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
盐真卿37 分钟前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶40 分钟前
C++ 17 详细特性解析(5)
开发语言·c++·算法
上海合宙LuatOS42 分钟前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
汤姆yu1 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端