力扣 题目73- 矩阵置零

题目

题解

其实思考一下就知道 我们必须记录一下遍历时0的xy 然后根据记录再去放0

但是如果我们使用其他容器去记录那么我们遍历完还要遍历 记录容器 时间复杂度肯定会搞

有没有一种方法可以在当前容器记录呢?

我们使用第一行与第一列记录 如果

if (matrix[i][j] == 0) {
matrix[0][j] = 0;
matrix[i][0] = 0;
}

这样我们只要重新遍历第一列与第一行 根据0再放对行列至0即可

但是我们发现第一列与第一行的处理有点问题 遍历会导致变0 然后导致其他全为0     所以我们需要提前遍历 看看是否有0 特殊处理 如果有则最后再将第一列或第一行放0

代码

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 class Solution {
 5 public:
 6     void setZeroes(vector<vector<int>>& matrix) {
 7         bool rowFlag = false;
 8         bool colFlag = false;
 9         //看看第一列行否有0
10         for (int j = 0; j < matrix[0].size(); j++) {
11             if (matrix[0][j] == 0) {
12                 rowFlag = true;
13                 break;
14             }
15         }
16         //看看第一列是否有0
17         for (int i = 0; i < matrix.size(); i++) {
18             if (matrix[i][0] == 0) {
19                 colFlag = true;
20                 break;
21             }
22         }
23 
24         for (int i = 1; i < matrix.size(); i++) {
25             for (int j = 1; j < matrix[i].size(); j++) {
26                 if (matrix[i][j] == 0) {
27                     matrix[0][j] = 0;
28                     matrix[i][0] = 0;
29                 }
30             }
31         }
32         //遍历看对应的第一列是否为0
33         for (int i = 1; i < matrix.size(); i++) {
34             if (matrix[i][0] == 0) {
35                 for (int j = 0; j < matrix[i].size(); j++) {
36                     matrix[i][j] = 0;
37                 }
38             }
39         }
40         //遍历看对应的第一行是否为0
41         for (int j = 1; j < matrix[0].size(); j++) {
42             if (matrix[0][j] == 0) {
43                 for (int i = 0; i < matrix.size(); i++) {
44                     matrix[i][j] = 0;
45                 }
46             }
47         }
48         //特殊处理第一列
49         if (colFlag) {
50             for (int i = 0; i < matrix.size(); i++) {
51                 matrix[i][0] = 0;
52             }
53         }
54 
55         //特殊处理第一行
56         if (rowFlag) {
57             for (int j = 0; j < matrix[0].size(); j++) {
58                 matrix[0][j] = 0;
59             }
60         }
61        
62 
63         
64     }
65 };
66 
67 int main() {
68     Solution sol;
69     vector<vector<int>> matrix = { {0, 1, 2, 0},{3, 4, 5, 2},{1, 3, 1, 5} };
70     sol.setZeroes(matrix);
71     for (int i = 0; i < matrix.size(); i++) {
72         for (int j = 0; j < matrix[i].size(); j++) {
73             cout << matrix[i][j]<<" ";
74         }
75         cout << endl;
76     }
77 
78 }
View Code

 

posted @ 2022-06-25 15:38  无聊的阿库娅  阅读(16)  评论(0编辑  收藏  举报