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; } };