当前位置: 首页 > article >正文

力扣73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

要求原地,所以在原数组上处理,设置两个标志位,判断第一行和第一列是否有为0的元素。

然后再处理除了第一行第一列的其他元素,进行遍历,如果有为0的元素,将第一行第一列对应的位置分别设置为0。然后再遍历第一行第一列将元素为0对应的行列(非第一行第一列)设置为0。

最后单独处理第一行第一列,根据标志位判断是否应该全置0

class Solution {
    public void setZeroes(int[][] matrix) {
        boolean firstRowZero = false;
        boolean firstColZero = false;
        //先遍历第一行
        for (int i = 0; i < matrix[0].length; i++) {
            if (matrix[0][i] == 0) {
                firstRowZero = true;
                break;
            }
        }
        //遍历第一列
        for (int i = 0; i < matrix.length; i++) {
            if (matrix[i][0] == 0) {
                firstColZero = true;
                break;
            }
        }
        //处理剩余
        for(int i = 1; i< matrix.length; i++){
            for(int j = 1; j < matrix[0].length; j++){
                if(matrix[i][j] == 0){
                    //设置对应的第一行第一列对应的位置值为0
                    matrix[0][j] = 0;
                    matrix[i][0] = 0;
                }
            }
        }
        //处理第一行
        for(int i = 1; i < matrix[0].length; i++){
            if(matrix[0][i] == 0){
                for(int j = 1; j < matrix.length; j++){
                    matrix[j][i] = 0;
                }
            }
        }
        //处理第一列
        for(int i = 1; i < matrix.length; i++){
            if(matrix[i][0] == 0){
                for(int j = 1; j < matrix[0].length; j++){
                    matrix[i][j] = 0;
                }
            }
        }
        //处理
        if(firstRowZero){
            Arrays.fill(matrix[0], 0);
        }
        if(firstColZero){
            for(int i = 0; i < matrix.length; i++){
                matrix[i][0] = 0;
            }
        }

    }
}


http://www.kler.cn/a/533222.html

相关文章:

  • OpenGL学习笔记(五):Textures 纹理
  • 排序算法--插入排序
  • Windows下怎么安装FFFmpeg呢?
  • 小书包:让阅读更美的二次开发之作
  • 【生成模型之十三】SmartEraser
  • Linux基础 ——tmux vim 以及基本的shell语法
  • 【Leetcode 每日一题】541. 反转字符串 II
  • Vue3 完整学习笔记 - 第二部分
  • Vue.js组件开发-实现广告图片浮动随屏幕滚动
  • LeetCode:115.不同的子序列
  • C++实现有限元三维杆单元计算 Bar3D2Node类(纯自研 非套壳)
  • 在 Ubuntu 22.04 上运行 Filebeat 7.10.2
  • vue2语法速通
  • 猫眼Java开发面试题及参考答案(上)
  • Cassandra的下载与安装
  • Java的String与StringBuilder例题
  • 如何学习大数据治理:轻松上手指南
  • 大语言模型概述
  • Redis的通用命令
  • 98,【6】 buuctf web [ISITDTU 2019]EasyPHP
  • 计算机网络安全与运维的关键 —— 常用端口全解析
  • 【JAVA】Netty使用教程
  • Java 报错:找不到或无法加载主类
  • Maven 项目的基本结构
  • 我们来学人工智能 -- 感悟DeepSeek
  • Llama最新开源大模型Llama3.1