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;
            }
        }
    }
};
相关推荐
居然有人6548 分钟前
27.贪心算法5
算法·贪心算法
非衣居士44 分钟前
游戏编程模式(28种编程模式)
数据结构·游戏开发
夏末秋也凉44 分钟前
力扣-动态规划-62 不同路径
算法·leetcode·动态规划
Fms_Sa1 小时前
将两个有序链表合并成一个有序链表
数据结构·链表
Jared_devin1 小时前
数据结构——哈夫曼树
数据结构
工大一只猿1 小时前
贪心算法-455分发饼干
算法·贪心算法
jieshenai1 小时前
基于专利合作地址匹配的数据构建区域协同矩阵
大数据·矩阵·数据分析
pljnb1 小时前
【LeetCode 热题100】 240. 搜索二维矩阵 II的算法思路及python代码
算法·leetcode·矩阵
迷茫小玄森2 小时前
【R语言】Kmeans算法
算法·r语言·kmeans
七七七七072 小时前
浅谈C++/C命名冲突
c语言·c++