Given a m x n matrix, if an element is 0,
set its entire row and column to 0. Do it in place.
click to show follow up.
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?
1 class Solution{ 2 public: 3 void setZeroes(vector<vector<int> > &matrix){ 4 const size_t m=matrix.size();//row 5 const size_t n=matrix[0].size();//col 6 bool row_has_zero=false; 7 bool col_has_zero=false; 8 9 for(size_t i=0;i<n;i++) 10 { 11 if(matrix[0][i]==0) 12 { 13 row_has_zero=true; 14 break; 15 } 16 } 17 18 for(size_t i=0;i<m;i++) 19 { 20 if(matrix[i][0]==0) 21 { 22 col_has_zero=true; 23 break; 24 } 25 } 26 27 for(size_t i=1;i<m;i++) 28 { 29 for(size_t j=1;j<n;j++) 30 { 31 if(matrix[i][j]==0) 32 { 33 matrix[0][j]=0; 34 matrix[i][0]=0; 35 } 36 } 37 38 } 39 40 for(size_t i=1;i<m;i++) 41 { 42 for(size_t j=1;j<n;j++) 43 { 44 if(matrix[i][0]==0||matrix[0][j]==0) 45 matrix[i][j]=0; 46 } 47 } 48 49 if(row_has_zero) 50 for(size_t i=0;i<n;i++) 51 matrix[0][i]=0; 52 53 if(col_has_zero) 54 for(size_t i=0;i<m;i++) 55 matrix[i][0]=0; 56 } 57 };
时间: 2024-11-12 07:13:50