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

lc 73 矩阵置0 ACM模式

O(1)空间复杂度
遍历矩阵,如果为0 则对应的第一行和第一列都置为0
最后分别遍历第一行和第一列,有0则全行或列置为0
第一行和第一列要单算,设置标志位,flag1 和 flag2 分别对应第一行或第一列中有0
标志位最先计算,最后处理
import java.util.Scanner;

public class main {
    static int[][] matrix;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        matrix = new int[m][n];
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                matrix[i][j] = in.nextInt();
            }
        }
        setZeroes(matrix);
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
    public static void setZeroes(int[][] matrix) {
        //第一行有0标志位
        boolean flag1 = false;
        //第一列有0标志位
        boolean flag2 = false;
        int rows = matrix.length;
        int cols = matrix[0].length;
        //先求标志位
        for(int i = 0; i < rows; i++){
            if(matrix[i][0] == 0)
                flag2 = true;
        }
        for(int j = 0; j < cols; j++){
            if(matrix[0][j] == 0)
                flag1 = true;
        }
        //有0则对应行/列为0
        for(int i = 1; i < rows; i++){
            for(int j = 1; j < cols; j++){
                if(matrix[i][j] == 0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }        
        //第一列为0 则对应的行为0
        for(int i = 1; i < rows; i++){
            if(matrix[i][0] == 0){
                for(int j = 1; j < cols; j++)
                    matrix[i][j] = 0;
            }
        }
        //第一行为0 则对应的列为0
        for(int j = 1; j < cols; j++){
            if(matrix[0][j] == 0){
                for(int i = 1; i < rows; i++)
                    matrix[i][j] = 0;
            }
        }
        //标志位为true的第一行/和列都为0
        if(flag1 == true){
            for(int j = 0; j < cols; j++ ){
                matrix[0][j] = 0;
            }
        }
        if(flag2 == true){
            for(int i = 0; i < rows; i++){
                matrix[i][0] = 0;
            }
        }
        return;
    }
}

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

相关文章:

  • RabbitMQ交换机类型
  • B2109 统计数字字符个数
  • 数学建模学习(135):使用Python基于WSM、WPM、WASPAS的多准则决策分析
  • 用ChatGPT提升工作效率:从理论到实际应用
  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--接口路径管理
  • PlotNeuralNet学习与入门
  • webpack5
  • 【RK3588 Linux 5.x 内核编程】-设备驱动中的sysfs
  • 【架构艺术】服务架构稳定性的基础保障
  • 嵌入式开发之刷新流
  • SAO-LSSVM分类预测 | SAO-LSSVM雪消融算法优化最小二乘支持向量机多特征分类预测
  • JavaScript 进阶 - 第4天 (黑马笔记)
  • [JAVAEE] 面试题(二) - CAS 和 原子类
  • Java项目实战II基于Spring Boot的秒杀系统设计与实现(开发文档+数据库+源码)
  • 使用Markdown编写适用于GitHub的README.md文件的目录结构
  • css-flex布局属性
  • Python爬虫:揭开店铺详情的神秘面纱
  • 【Jenkins】 上传docker包并推送到远程仓库
  • 构建您自己的 RAG 应用程序:使用 Ollama、Python 和 ChromaDB 在本地设置 LLM 的分步指南
  • 独立开发的个人品牌打造:个人IP与独立开发的结合
  • 如何将epub转换成word?
  • HTML 基础标签——表单标签<form>
  • C语言中的野指针以及避免野指针的常用方式
  • 字符串匹配——KMP算法
  • 六、Go语言快速入门之数组和切片
  • 斩!JavaScript语法进阶