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 = matrix0.length; // 获取矩阵的列数

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

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

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

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

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

if (matrixij == 0) {

rowRecordi = 1; // 标记第i行需要置零

colRecordj = 1; // 标记第j列需要置零

}

}

}

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

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

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

if (rowRecordrow == 1 || colRecordcol == 1) {

matrixrowcol = 0; // 如果行或列被标记,则置零

}

}

}

相关推荐
千寻girling4 小时前
记录第一次学习 Docker
学习·docker·容器
一只齐刘海的猫4 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
Kobebryant-Manba5 小时前
学习RNN(简洁实现)
人工智能·rnn·学习
金色熊族5 小时前
QTransform使用心得(二)--仿射变换、非仿射变换、矩阵
qt·线性代数·矩阵
知南x6 小时前
【DPDK例程学习】(4) l2fwd
学习·word
努力努力再努力FFF6 小时前
大学四年AI能力规划:从入门学习到简历表达
人工智能·学习
Litluecat6 小时前
配合多角色提示语3,学习AI漫剧(刚开始学)
人工智能·学习·ai·提示词·短剧·漫剧
三品吉他手会点灯6 小时前
STM32F103 学习笔记-24-I2C-读写EEPROM(第1节)-I2C物理层介绍
笔记·stm32·学习
MartinYeung56 小时前
[论文学习]大型语言模型中个人可识别资讯(PII)的机器遗忘技术:UnlearnPII 基准与 PERMU_tok 方法的深度分析
人工智能·学习·语言模型
fanged6 小时前
Linux内核学习21--V4L2学习3(应用)(TODO)
学习