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

 

posted @ 2020-03-30 18:23  Jinxiaobo0509  阅读(118)  评论(0)    收藏  举报