矩阵置零

问题描述

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

示例 1:
输入:
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出:
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]

示例 2:
输入:
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
输出:
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes

思路

思路很简单

  • 遍历一下matrix,记录有0的行,有0的列
  • 将matrix中记录的行、列置为0
    这样子就可以了

题解

class Solution {
public:
    void setZeroes(vector<vector<int>> &matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        vector<bool> rows(n, true);
        vector<bool> columns(m, true);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m ; j++) {
                if (matrix[i][j] == 0) {
                    rows[i] = false;
                    columns[j] = false;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            if (rows[i] == false) {
                for (int j = 0; j < m; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        for (int j = 0; j < m; j++) {
            if (columns[j] == false) {
                for (int i = 0; i < n; i++) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
};

标签: none

添加新评论