美文网首页
LeetCode-Set Matrix Zero

LeetCode-Set Matrix Zero

作者: 圣地亚哥_SVIP | 来源:发表于2018-11-26 17:28 被阅读0次

目标:

给定一个m*n的数组,如果一个元素为0,则其所在行以及所在列,均设置为0

解题要求:常数空间

解题思路:

  1. 利用第一行以及第一列分别记录,对应的列是否存在0,对应的行是否存在0;遍历数组时,如果发现一个为0的元素,则设置第0行其所在列为0;其所在行第0列为0;
  2. 由于第一行及第一列腾出用于记录,所以需要预先判断第一行及第一列是否存在0;
  3. 根据第一行及第一列的情况,遍历数组。
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        if (matrix.empty())return;
        int col = matrix.size();
        int row = matrix[0].size();
        bool first_col = false;
        bool first_row = false;
        //记录第一行是否全0行
        for (int j=0;j<row;++j){
            if (matrix[0][j] == 0){
                first_col = true;
            }
        }
        //记录第一列是否是全0列
        for (int j=0;j<col;++j){
            if (matrix[j][0] == 0){
                first_row = true;
            }
        }
        for (int i=1;i<col;++i){
            for (int j=1;j<row;++j){
                if (matrix[i][j] == 0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for (int i=1;i<row;++i){
            if (matrix[0][i]==0){
                for (int j=1;j<col;++j){
                    matrix[j][i] = 0;
                }
            }
        }
        for (int j=1;j<col;++j){
            if (matrix[j][0] == 0){
                for (int i=1;i<row;++i){
                    matrix[j][i] = 0;
                }
            }
        }
        
        if (first_row){
            for (int i=0;i<col;++i){
                matrix[i][0] = 0;
            }
        }
        
        if (first_col){
            for (int j=0;j<row;++j){
                matrix[0][j] = 0;
            }
        }
    }
};

相关文章

网友评论

      本文标题:LeetCode-Set Matrix Zero

      本文链接:https://www.haomeiwen.com/subject/vjobqqtx.html