1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Set Matrix Zeroes

Posted on 2014-01-11 22:08  1957  阅读(1500)  评论(0编辑  收藏  举报

O(m+n)其实很简单的,记录列行,有木有0就好了

如果是O(1),那么我们就随便找个0所在的列,行当做我们之前那两个数组嘛。。。

 

class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        int m = matrix.size();
        if(m < 1) return ;
        int n = matrix.front().size();
        
        //found first zero
        int row = -1 ,  col = -1;;
        for(int i = 0 ; i < m ; i ++) {
            for(int j = 0 ; j < n ; j++) {
                if(matrix[i][j] == 0) {
                    row = i;
                    col = j;
                    break;
                }
            }
            if(row != -1) break;
        }
        
        if(row == -1) return;
        //col
       // for(int i = 0 ; i < n ; i++) matrix[row][i] = 0;
        //row
    //    for(int i = 0 ; i < m ; i++) matrix[i][col] = 0;
        
        //row , col to record if has zero
        for(int i = 0 ; i < m ; i++) {
            for(int j = 0 ; j < n ; j++) {
                if(matrix[i][j] == 0) {
                    matrix[row][j] = 0;
                    matrix[i][col] = 0;
                }
            }
        }
        //fill col
        for(int i = 0 ; i < n ; i++) {
            if(i != col && matrix[row][i] == 0) {
                //fill
                for(int j = 0 ; j < m ; j++) {
                    matrix[j][i] = 0;
                }
            }
        }
        //fill row
        for(int i = 0 ; i < m ; i++) {
            if(i != row && matrix[i][col] == 0) {
                //fill
                for(int j = 0 ; j < n ; j++) {
                    matrix[i][j] = 0;
                }
            }
        }
        //col
        for(int i = 0 ; i < n ; i++) matrix[row][i] = 0;
        //row
        for(int i = 0 ; i < m ; i++) matrix[i][col] = 0;
    }
};