73. Set Matrix Zeroes

来源:互联网 发布:淘宝便利店 编辑:程序博客网 时间:2024/05/22 07:56

这道题要求将矩阵内含有零的行和列全部置零。

我的方法是扫描矩阵三遍,第一遍把需要置0的行号和列号存下来,第二遍和第三遍分别把行和列置0.

class Solution {public:    void setZeroes(vector<vector<int>>& matrix) {        if(matrix.empty() || matrix[0].empty()) return;        set<int> rows;        set<int> cols;        for(int i = 0; i < matrix.size(); ++i){            for(int j = 0; j < matrix[0].size(); ++j){                if(matrix[i][j] == 0){                    rows.insert(i);                    cols.insert(j);                }            }        }        for(int i = 0; i < matrix.size(); ++i){            if(rows.find(i) != rows.end()){                for(int j = 0; j < matrix[0].size(); ++j){                    matrix[i][j] = 0;                    }            }        }        for(int j = 0; j < matrix[0].size(); ++j){            if(cols.find(j) != cols.end()){                for(int i = 0; i < matrix.size(); ++i){                    matrix[i][j] = 0;                }            }        }    }};

如果要求的空间复杂度是O(1),则可以把原数组的第一行第一列来记录各行各列是否有0.

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


原创粉丝点击