73. 矩阵置零
1 class Solution 2 { 3 int dx[4] = {1,0,-1,0}; 4 int dy[4] = {0,1,0,-1}; 5 public: 6 void setZeroes(vector<vector<int>>& matrix) 7 { 8 int m = matrix.size(),n = matrix[0].size(); 9 vector<vector<bool>> flag(m,vector<bool>(n,false)); 10 11 for(int i = 0;i < m;i ++)//首先标记哪些元素为0 12 { 13 for(int j = 0;j < n;j ++) 14 { 15 if(matrix[i][j] == 0) flag[i][j] = true; 16 } 17 } 18 19 for(int i = 0;i < m;i ++) 20 { 21 for(int j = 0;j < n;j ++) 22 { 23 if(flag[i][j]) //标记的元素如果为True,就可以进行修改 24 { 25 for(int k = 0;k < 4;k ++) 26 { 27 int x = dx[k] + i,y = dy[k] + j; 28 while(x >= 0 && x < m && y >= 0 && y < n)//一直朝着某个方向修改 29 { 30 matrix[x][y] = 0; 31 x += dx[k]; 32 y += dy[k]; 33 } 34 } 35 } 36 } 37 } 38 } 39 };
1 class Solution 2 { 3 public: 4 void setZeroes(vector<vector<int>>& matrix) 5 { 6 int row = matrix.size(); 7 int col = matrix[0].size(); 8 bool row0_flag = false; 9 bool col0_flag = false; 10 11 // 第一行是否有零 12 for (int j = 0; j < col; j ++) 13 { 14 if (matrix[0][j] == 0) 15 { 16 row0_flag = true; 17 break; 18 } 19 } 20 21 // 第一列是否有零 22 for (int i = 0; i < row; i ++) 23 { 24 if (matrix[i][0] == 0) 25 { 26 col0_flag = true; 27 break; 28 } 29 } 30 31 // 把第一行第一列作为标志位 32 for (int i = 1; i < row; i ++) 33 { 34 for (int j = 1; j < col; j ++) 35 { 36 if (matrix[i][j] == 0) matrix[i][0] = matrix[0][j] = 0; 37 } 38 } 39 40 // 置0 41 for (int i = 1; i < row; i++) 42 { 43 for (int j = 1; j < col; j++) 44 { 45 if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0; 46 } 47 } 48 if (row0_flag) 49 { 50 for (int j = 0; j < col; j++) matrix[0][j] = 0; 51 } 52 if (col0_flag) 53 { 54 for (int i = 0; i < row; i++) matrix[i][0] = 0; 55 } 56 } 57 };
Mamba never out

浙公网安备 33010602011771号