[leetcode]Set Matrix Zeroes

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;
    }
};
原文地址:https://www.cnblogs.com/x1957/p/3515396.html