-
Notifications
You must be signed in to change notification settings - Fork 5
/
LC_73_SetMatrixZeroes.cpp
111 lines (86 loc) · 2.69 KB
/
LC_73_SetMatrixZeroes.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
https://leetcode.com/problems/set-matrix-zeroes/
73. Set Matrix Zeroes
*/
class Solution {
public:
void setZeroes_bool(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<bool> row(m,false), col(n, false);
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
if(matrix[i][j]==0)
{
row[i]=true;
col[j]=true;
}
}
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
if(row[i] || col[j])
{
matrix[i][j]=0;
}
}
}//end
void setZeroes_int(vector<vector<int>>& matrix) {
// int m = matrix.size();
// int n = matrix[0].size();
vector<int> row, col;
for(int i=0; i<matrix.size(); i++)
for(int j=0; j<matrix[0].size(); j++)
{
if(matrix[i][j]==0)
{
row.push_back(i);
col.push_back(j);
}
}
for(int r=0; r<row.size(); r++)
for(int j=0; j<matrix[0].size(); j++)
matrix[row[r]][j]=0;
for(int c=0; c<row.size(); c++)
for(int i=0; i<matrix.size(); i++)
matrix[i][col[c]]=0;
}//end
void setZeroes(vector<vector<int>>& matrix) {
const int m = matrix.size();
const int n = matrix[0].size();
bool fillFirstRow = false;
bool fillFirstCol = false;
// first col is zero or not
for(int r=0; r<m; r++)
if(matrix[r][0]==0)
{
fillFirstCol = true;
break;
}
// first row is zero or not
for(int c=0; c<n; c++)
if(matrix[0][c]==0)
{
fillFirstRow = true;
break;
}
for(int r=1; r<m; r++)
for(int c=1; c<n; c++)
if(matrix[r][c] == 0)
{
matrix[r][0]=0;
matrix[0][c]=0;
}
for(int r=1; r<m; r++)
for(int c=1; c<n; c++)
if(matrix[r][0] == 0 || matrix[0][c]==0)
matrix[r][c]=0;
if(fillFirstRow)
for(int c=0; c<n; c++)
matrix[0][c]=0;
if(fillFirstCol)
for(int r=0; r<m; r++)
matrix[r][0]=0;
}//end
};