力扣 73. 矩阵置零

🔗 https://leetcode.cn/problems/set-matrix-zeroes

题目

  • 给一个 n * m 的二维数组,如果有一个 0 元素,则把对应的行列都置为零
  • 要求 in-place

思路

  • 直观的想法是遍历一遍矩阵,用 set 分别记录下 0 元素对应的行和列,再遍历下矩阵,对命中相关行列的元素置零。不过该方法不符合题目要求,需要有额外的存储空间
  • 取第一行和第一列作为标记位,把 0 元素对应的 [row][0] [0][col] 设置为 0,遍历矩阵时根据这些标志位,判断当前元素是否需要设置为 0
    • 需要特殊处理下第一行和第一列的 0 元素,避免在遍历的过程中标志位被修改

代码

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        bool mark_row = 0, mark_col = 0;
        for (int i = 0; i < matrix.size(); i++) {
            for (int j = 0; j < matrix[i].size(); j++) {
                if (matrix[i][j] == 0) {
                    if (i == 0) {
                        mark_row = true;
                    }
                    if (j == 0) {
                        mark_col = true;
                    }
                    if(i== 0 || j == 0) continue;
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for (int i = 1; i < matrix.size(); i++) {
            for (int j = 1; j < matrix[i].size(); j++) {
                if (matrix[i][0] == 0) matrix[i][j] = 0;
                if (matrix[0][j] == 0) matrix[i][j] = 0;
            }
         }
        if (mark_row) {
            for (int i = 0; i < matrix[0].size(); i++) matrix[0][i] = 0;
        }

        if (mark_col) {
            for (int i = 0; i < matrix.size(); i++) matrix[i][0] = 0;
        }
        
    }
};v
相关推荐
敲代码的瓦龙38 分钟前
西邮移动应用开发实验室2025年二面题解
开发语言·c++·算法
RTC老炮1 小时前
webrtc弱网-RembThrottler类源码分析及算法原理
网络·算法·webrtc
野蛮人6号1 小时前
力扣热题100道之73矩阵置零
算法·leetcode·矩阵
野蛮人6号1 小时前
力扣热题100道之238除自身以外数组的乘积
算法·leetcode·职场和发展
坚持编程的菜鸟1 小时前
LeetCode每日一题——缀点成线
c语言·算法·leetcode
大数据张老师1 小时前
数据结构——广度优先搜索
数据结构·图论·宽度优先
小梁努力敲代码1 小时前
java数据结构--LinkedList与链表
java·数据结构·链表
派大星爱吃猫1 小时前
直接插入排序详解
算法·排序算法·直接插入排序
一只侯子2 小时前
Tuning——CC调试(适用高通)
开发语言·图像处理·笔记·学习·算法
csdn_aspnet2 小时前
直圆锥(Right Circular Cone)
算法·圆锥