LeetCode学习之0矩阵

完整实现代码如下:

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        //初始化结果存储数组
        int M = matrix.length;
        int N = matrix[0].length;
        int[] rowRecord = new int[M];
        int[] colRecord = new int[N];
        //第一次循环遍历 标记需要置为0的行和列
        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
                if(matrix[i][j] == 0){  
                    rowRecord[i] = 1;  //用1 来标记是否行为0的存在
                    colRecord[j] = 1;   //用1标记是否列为0的存在
                }   
            }
        }
        //第二次循环 根据记录置为0
        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
                if(rowRecord[i] == 1 || colRecord[j] == 1){
                    matrix[i][j] = 0;
                }
            }
        }
    }
}

实现思路分析:在第一次遍历二维数组时,在矩阵中对于为0的位置进行标记,并且分别存入行和列的标记数组中,第二次遍历二维数组时,根据行和列的标记数组中的标记将矩阵的对应行和列都置为0

代码实现步骤:

1 初始化记录数组:

int M = matrix.length; // 获取矩阵的行数

int N = matrix[0].length; // 获取矩阵的列数

int[] rowRecord = new int[M]; // 创建行记录数组,初始值为0

int[] colRecord = new int[N]; // 创建列记录数组,初始值为0

2 第一次遍历,标记需要置为0的行和列:

for (int i = 0; i < M; i++) {

for (int j = 0; j < N; j++) {

if (matrix[i][j] == 0) {

rowRecord[i] = 1; // 标记第i行需要置零

colRecord[j] = 1; // 标记第j列需要置零

}

}

}

3 第二次遍历,需要根据标记数组的记录将对应的行和列置为0:

for (int row = 0; row < M; row++) {

for (int col = 0; col < N; col++) {

if (rowRecord[row] == 1 || colRecord[col] == 1) {

matrix[row][col] = 0; // 如果行或列被标记,则置零

}

}

}

相关推荐
其美杰布-富贵-李28 分钟前
HDF5文件学习笔记
数据结构·笔记·学习
LYFlied40 分钟前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
d111111111d2 小时前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
嗷嗷哦润橘_3 小时前
AI Agent学习:MetaGPT之我的工作
人工智能·学习·flask
知识分享小能手3 小时前
CentOS Stream 9入门学习教程,从入门到精通,Linux日志分析工具及应用 —语法详解与实战案例(17)
linux·学习·centos
LYFlied4 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
2301_783360134 小时前
【学习笔记】关于RNA_seq和Ribo_seq技术的对比和BAM生成
笔记·学习
qq_397731514 小时前
Objective-C 学习笔记(第9章)
笔记·学习·objective-c
ujainu4 小时前
Python学习第一天:保留字和标识符
python·学习·标识符·保留字
sheji34164 小时前
【开题答辩全过程】以 基于Java的应急安全学习平台的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习