Sunday, March 3, 2013

Set Matrix Zeroes

/*
Set Matrix Zeroes
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?
*/
class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int rowSize = matrix.size();
        if(rowSize == 0) return;
        int colSize = matrix[0].size();
        if(colSize == 0) return;
       
        int i, j;
        int k;
        int impossibleValue = -10000;
       
        for(i=0; i<rowSize; i++){
          for(j=0; j<colSize; j++){
            if(matrix[i][j]==0){
             matrix[i][j] = impossibleValue;
            }
          }
        }
       
        for(i=0; i<rowSize; i++){
          for(j=0; j<colSize; j++){
            if(matrix[i][j] == impossibleValue){
              for(k=0; k<colSize; k++){
                 if(matrix[i][k]!=impossibleValue)
                 matrix[i][k] = 0;
              }
              for(k=0; k<rowSize; k++){
                 if(matrix[k][j]!=impossibleValue)
                 matrix[k][j] = 0;
              }
            }
          }
        }
       
        for(i=0; i<rowSize; i++){
         for(j=0; j<colSize; j++){
            if(matrix[i][j] == impossibleValue)
            matrix[i][j] = 0;
         }
        }
    }
};

No comments:

Post a Comment