1. 073

set-matrix-zeroes


2. 算法

O(n+m)

先通过两个数组来记录该行该列上有没有0元素,等对矩阵遍历候再统一修改

  • 创建数组,记录矩阵中的行和列是否要变为0标志
  • 遍历矩阵,标记矩阵那些行与列元素需要变为0
  • 遍历矩阵,根据矩阵中对应的行列是否为0来更改矩阵的元素

3. 代码

class Solution{public:
    void setZeroes(vector< vector<int> > &matrix){
// 获取矩阵的行数 
        int row = matrix.size();
        if (row < 1)
            return ;
// 获取矩阵的列数 
        int col = matrix[0].size();
// 定义存放行列是否变0标志数组 
        vector<bool> colRecorder(col, false);
        vector<bool> rowRecorder(row, false);
// 遍历矩阵,标志哪些行和哪些列需要变为0 
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                if (matrix[i][j] == 0){
                    rowRecorder[i] = true;
                    colRecorder[j] = true;
                }
            }
        }
// 遍历矩阵,根据行列是否为0标志对矩阵中的数据进行更改 
    for (int i = 0; i < row; i++){
        for (int j = 0; j < col; j++){
            if (rowRecorder[i])
                matrix[i][j] = 0;
            else if (colRecorder[j])
                matrix[i][j] = 0;
            }
        }
    }
};

results matching ""

    No results matching ""