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;
            }
    }
}
相关推荐
春日见1 天前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊1 天前
”回调“高级
算法·青少年编程
云里雾里!1 天前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
ZHE|张恒1 天前
Spring Bean 生命周期
java·spring
q***38511 天前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
小白学大数据1 天前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
一只侯子1 天前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue1 天前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
程序员西西1 天前
SpringBoot接口安全:APIKey保护指南
java·spring boot·计算机·程序员·编程·编程开发
不许哈哈哈1 天前
Python数据结构
数据结构·算法·排序算法