力扣73. 矩阵置零

Problem: 73. 矩阵置零

题目描述

在这里插入图片描述在这里插入图片描述

思路

思路1:利用一个等大的矩阵判定

复制一个与原始矩阵一样大的矩阵temp,遍历temp时若temp[i][j] == 0,则将martix对应的行与列均设置为0

思路2:利用两个一维矩阵判定

利用两个bool类型的一维矩阵marxRow,markCol分别表示行于列,若martix[i][j] == 0时则marxRow[i] == true;markCol[j] == true;再次遍历martix时若marxRow[i] == true;markCol[j] == true则将martix[i][j]设为0

思路3:利用原始矩阵第一行与列判定

1.利用两个bool变量用来判断martix的第一行、列是否存在0(最后利用两个变量单独处理、将martix的第一行、列设为0);
2.从martix的第一行、列开始,若martix[i][j] == 0则将martix[i][0]与martix[0][j]均设为0;再次从martix的第一行、列遍历时,若martix[i][0] == 0 || martix[0][j] == 0则将martix[i][j]设为0
3.最后利用两个变量单独处理、将martix的第一行、列设为0

复杂度

其中 m m m为martix的行数, n n n为martix的列数

思路1:
时间复杂度:

O ( m × n ) O(m \times n) O(m×n)

空间复杂度:

O ( m × n ) O(m \times n) O(m×n)

思路2:
时间复杂度:

O ( m × n ) O(m \times n) O(m×n)

空间复杂度:

O ( m + n ) O(m + n) O(m+n)

思路3:
时间复杂度:

O ( m × n ) O(m \times n) O(m×n)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

思路1:

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();
        vector<vector<int>> temp(row, vector<int>(col));
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                temp[i][j] = matrix[i][j];
            }
        }
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                if (temp[i][j] == 0) {
                    //Set the current row to 0
                    for (int m = 0; m < col; ++m) {
                        matrix[i][m] = 0;
                    }
                    //Set the current colcumn to 0
                    for (int n = 0; n < row; ++n) {
                        matrix[n][j] = 0;
                    }
                }
            }
        }
    }
};

思路2:

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();
        vector<bool> markRow(row);
        vector<bool> markCol(col);
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                if (matrix[i][j] == 0) {
                    markRow[i] = true;
                    markCol[j] = true;
                }
            }
        }
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                if (markRow[i] || markCol[j]) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
};

思路3:

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();
        bool markRow0 = false;
        bool markCol0 = false;
        //Check whether 0 exists in the first row or column
        for (int i = 0; i < row; ++i) {
            if (matrix[i][0] == 0) {
                markCol0 = true;
            }
        }
        for (int j = 0; j < col; ++j) {
            if (matrix[0][j] == 0) {
                markRow0 = true;
            }
        }
        for (int i = 1; i < row; ++i) {
            for (int j = 1; j < col; ++j) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for (int i = 1; i < row; ++i) {
            for (int j = 1; j < col; ++j) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }
        //Handle the first row and column separately
        if (markRow0) {
            for (int j = 0; j < col; ++j) {
                matrix[0][j] = 0;
            }
        }

        if (markCol0) {
            for (int i = 0; i < row; ++i) {
                matrix[i][0] = 0;
            }
        }
    }
};

在这里插入图片描述

相关推荐

  1. 100】73.矩阵

    2024-03-28 23:24:06       44 阅读
  2. 73. 矩阵

    2024-03-28 23:24:06       34 阅读
  3. 73. 矩阵

    2024-03-28 23:24:06       33 阅读
  4. 73.矩阵

    2024-03-28 23:24:06       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 23:24:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 23:24:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 23:24:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 23:24:06       18 阅读

热门阅读

  1. 防抖和节流的概念及区别

    2024-03-28 23:24:06       16 阅读
  2. 2024年数字IC秋招-沐曦-GPU验证-笔试题

    2024-03-28 23:24:06       16 阅读
  3. 【 [蓝桥杯 2013 省 B] 翻硬币】

    2024-03-28 23:24:06       19 阅读
  4. 初入C++

    初入C++

    2024-03-28 23:24:06      15 阅读
  5. 二、数据库管理员密码管理

    2024-03-28 23:24:06       17 阅读
  6. 看书标记【数据科学:R语言实战 5】

    2024-03-28 23:24:06       20 阅读
  7. 获取CPLEX求解MIP时添加的cutting planes (C program)

    2024-03-28 23:24:06       20 阅读
  8. Rust 中两个 HashMap 是否相等的判断问题

    2024-03-28 23:24:06       16 阅读
  9. ruoyi使用笔记

    2024-03-28 23:24:06       19 阅读
  10. vue如何将对象键值对互换

    2024-03-28 23:24:06       18 阅读