[LeetCode]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.
空间复杂度O(1),不能使用额外的空间,那得多重复几次。
- 判断第一行和第一列是否有0,用于最后对第一行和第一列赋值;
- 将除掉第一行和第一列的[m-1,n-1]映射到第一行和第一列保存,如果matrix[i][j]=0那么matrix[0][j]=0,matrix[i][0]=0;
- 将第一行和第一列赋值。
1 class Solution { 2 public: 3 void setZeroes(vector<vector<int>>& matrix) { 4 if(matrix.size()==0 || matrix[0].size()==0) return; 5 int m=matrix.size(),n=matrix[0].size(); 6 bool firstRowZero=false,firstColZero=false; 7 for(int i=0;i<m;i++) 8 { 9 if(matrix[i][0]==0) 10 { 11 firstColZero = true; 12 break; 13 } 14 } 15 for(int j=0;j<n;j++) 16 { 17 if(matrix[0][j]==0) 18 { 19 firstRowZero = true; 20 break; 21 } 22 } 23 for(int i=1;i<m;i++) 24 { 25 for(int j=1;j<n;j++) 26 { 27 if(matrix[i][j]==0) 28 { 29 matrix[0][j]=0; 30 matrix[i][0]=0; 31 } 32 } 33 } 34 for(int i=1;i<m;i++) 35 { 36 for(int j=1;j<n;j++) 37 { 38 if(matrix[0][j]==0 || matrix[i][0]==0) 39 { 40 matrix[i][j]=0; 41 } 42 } 43 } 44 if(firstRowZero) 45 { 46 for(int j=0;j<n;j++) matrix[0][j]=0; 47 } 48 if(firstColZero) 49 { 50 for(int i=0;i<m;i++) matrix[i][0]=0; 51 } 52 } 53 };