leetcode 73. 矩阵置零

题目如下

数据范围

cpp 复制代码
如果一个点m(i,j) == 0其中i j都大于0那么按照题目要求对应的m[0][j] m[i][0]都要赋值为0.
所以我们可以令第一行和第一列作为标记是否对应的列和行需要置为0.
又因为我们没法判断第一行和第一列所以需要额外两个变量标记第一列和第二列。
这样就可以满足题目要求的O(1)空间复杂度

通过代码

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        bool r = false, c = false;
        int n = matrix.size();
        int m = matrix[0].size();
        for (int i = 0; i < n; i++) {
            if (matrix[i][0] == 0) {
                c = true;
                break;
            }
        }
        for (int i = 0; i < m; i++) {
            if (matrix[0][i] == 0) {
                r = true;
                break;
            }
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (matrix[i][j] == 0) {
                    matrix[0][j] = 0;
                    matrix[i][0] = 0;
                }
            }
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (!matrix[i][0] || !matrix[0][j]) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (r) {
            for (int i = 0; i < m; i++) {
                matrix[0][i] = 0;
            }
        }

        if (c) {
            for (int i = 0; i < n; i++) {
                matrix[i][0] = 0;
            }
        }
    }
};
相关推荐
算AI18 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
我不会编程55519 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
懒羊羊大王&19 小时前
模版进阶(沉淀中)
c++
owde19 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头19 小时前
分享宝藏之List转Markdown
数据结构·list
GalaxyPokemon20 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi20 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
hyshhhh20 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
蒙奇D索大20 小时前
【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
c语言·数据结构·考研·改行学it
A旧城以西20 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea