Set Matrix Zeros

来源:互联网 发布:can数据传递系统是根据 编辑:程序博客网 时间:2024/05/16 11:13

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

Follow up:

Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?


We could use the first row as the storage.  In each line, if we find some number is zero, we set this line as zero, and set the corresponding col in first row as 0.


In my original code, I did not use the first row as storage.  I store the last row which I set as zero.  In that row, I store all the col which will be set as zero later

class Solution {public:    void setZeroes(vector<vector<int> > &matrix) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(matrix.size()== 0 || matrix[0].size() == 0)            return;        int rowNum = matrix.size(), colNum = matrix[0].size(), rowSet = -1;        int i, j;        for(i=0; i<rowNum; i++){            for(j=0; j<colNum; j++)                if(matrix[i][j] == 0)                    break;            if(j < colNum){                if(rowSet == -1) {                    rowSet = i;                    for(j=0; j<colNum; j++)                        if(matrix[i][j])                            matrix[i][j] = 0;                        else                            matrix[i][j] = 1;                } else {                    for(j=0; j<colNum; j++)                        if(matrix[rowSet][j] || !matrix[i][j])                            matrix[i][j] = 1;                        else                            matrix[i][j] = 0;                    rowSet = i;                }            }        }        if(rowSet != -1)            for(j=0; j<colNum; j++)                if(matrix[rowSet][j])                    for(i=0; i<rowNum; i++)                        matrix[i][j] = 0;    }};



原创粉丝点击