首页 > 其他分享 >73. 矩阵置零

73. 矩阵置零

时间:2024-12-17 19:42:54浏览次数:3  
标签:matrix 标记 int 行和列 矩阵 ++ 73

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

实例一:
image

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

实例二:
image

输入: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。
  • 为了不破坏原始矩阵的信息,遍历时从第 1 行和第 1 列开始,同时处理第 0 行和第 0 列时单独处理。
class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        boolean flagRow0 = false;
        boolean flagCol0 = false;
        //检查第0行是否有0
        for(int i = 0; i < n; i++){
            if(matrix[0][i] == 0){
                flagRow0 = true;
            }
        }
        //检查第0列是否有0
        for(int i = 0; i < m; i++){
            if(matrix[i][0] == 0){
                flagCol0 = true;
            }
        }

        //如果(i,j)处为0,将其所在的行和列的第一个元素标记为0
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                if(matrix[i][j] == 0){
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }

        //根据前面的标记进行实际的置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;
                }
            }
        }

        //处理第0行
        for(int i = 0; i < n; i++){
            if(flagRow0){
                matrix[0][i] = 0;
            }
        }
        //处理第0列
        for(int i = 0; i < m; i++){
            if(flagCol0){
                matrix[i][0] = 0;
            }
        }
    }
}

[!NOTE]

  1. 第 0 行,第 0 列是用来做标记的,所以在进行标记处理的时候,是从 1 开始的。
  2. 问题解释:前面两个for循环以及两个布尔变量的作用是,用于处理第0行或者第0列本身就存在0的情况。

标签:matrix,标记,int,行和列,矩阵,++,73
From: https://www.cnblogs.com/drunkerl/p/18613298

相关文章

  • 抖音SEO矩阵源码搭建:一键霸屏秘诀揭秘
    抖音SEO系统,也称为抖音SEO矩阵或抖音搜索优化排名系统,是一个集成了多种功能的平台。它的核心功能包括AI视频混剪、视频产出、AI视频制作、多账号多平台管理、内部分发以及站内搜索排名优化等。该系统还提供了会员爆客和企业号管理等功能。虽然每个功能都经过深度开发,但抖音作为......
  • P5773 [JSOI2016] 轻重路径 题解
    Description在二叉树上,不断删除叶子,你要维护其重链剖分后重儿子编号和。如果两个孩子大小相同,在一开始连向左儿子,后面保持修改前的连接。\(n\leq2\times10^5\)。Solution考虑把一个叶子\(x\)删掉会对改变哪些点的重儿子。首先改变的点\(y\)一定在\(x\)到根的链上,同时......
  • LeetCode题练习与总结:火柴拼正方形--473
    一、题目描述你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍 拼成一个正方形。你 不能折断 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 使用一次 。如果你能使这个正方形,则返回 true ,否则返......
  • 代码随想录算法训练营第四十八天|739.每日温度、496.下一个更大元素、503.下一个更大
    1leetcode739.每日温度题目链接:739.每日温度-力扣(LeetCode)文章链接:代码随想录视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度哔哩哔哩bilibili思路:就真的是暴力搜索来写这道题目,但是呢,有些示例里面就超时了,至少有点思路了吧,也算是好消息1.1自己的方法能......
  • ABB机器人3HAC17332-1电机维修攻略分享
    ABB作为工业机器人制造商,其伺服电机是机器人执行精确动作的核心部件。伺服电机负责将电能转化为机械能,驱动机器人的关节和臂部运动。一旦伺服电机出现故障,将直接影响机器人的运行精度和稳定性。一、ABB机器人维修前准备在进行ABB机器人伺服电机维修之前,需要做好以下准备工作:1、环......
  • 海外版TikTok矩阵出海获客,从下载搭建到运营教学
    海外版TikTok矩阵运营,如何快速搭建?在如今数字化时代,企业和个人品牌都非常重视海外市场的拓展。而作为全球热门的短视频平台,TikTok自然成为了兵家必争之地。然而,由于TikTok在海外有多个版本,例如:TikTok、DY、KS、XHS等,每个平台的运营策略和规则都不尽相同。因此,想要高效管理这......
  • [LeetCode] 2730. Find the Longest Semi-Repetitive Substring
    Youaregivenadigitstringsthatconsistsofdigitsfrom0to9.Astringiscalledsemi-repetitiveifthereisatmostoneadjacentpairofthesamedigit.Forexample,"0010","002020","0123","2002",and&quo......
  • springboot高校心理测评系统-计算机毕业设计源码25173
    目 录第1章 引 言1.1 选题背景1.2 研究现状1.3 论文结构安排第2章 系统的需求分析2.1 系统可行性分析2.1.1 技术方面可行性分析2.1.2 经济方面可行性分析2.1.3 法律方面可行性分析2.1.4 操作方面可行性分析2.2 系统功能需求分析2.......
  • P1973 [NOI2011] NOI 嘉年华
    前言好困难啊,最近的新目标是吧效率拉起来思路转化题意一问对于\(n\)条线段,我们对于每条线段,都要分到两个场地中的一个或者放弃,求如何分配使得两个场地不存在\(i\)满足\(i\inS_1\)且\(i\inS_2\)(其中\(S_1,S_2\)分别表示两个场地线段的集合),并且使......
  • JAVA学习-练习试用Java实现“使用嵌套循环打印出一个5x5的星号矩阵”
    问题:创建一个Java程序,使用嵌套循环打印出一个5x5的星号矩阵。解答思路:以下是一个Java程序,它使用嵌套循环打印出一个5x5的星号矩阵:publicclassStarMatrix{publicstaticvoidmain(String[]args){intsize=5;//矩阵大小for(inti=0......