@@ -49,27 +49,218 @@ N = 3
49
49
50
50
<p >  ; </p >
51
51
52
-
53
52
## 解法
54
53
55
54
<!-- 这里可写通用的实现逻辑 -->
56
55
56
+ “哈希表”实现。
57
+
57
58
<!-- tabs:start -->
58
59
59
60
### ** Python3**
60
61
61
62
<!-- 这里可写当前语言的特殊实现逻辑 -->
62
63
63
64
``` python
64
-
65
+ class Solution :
66
+ def findBlackPixel (self , picture : List[List[str ]], target : int ) -> int :
67
+ m, n = len (picture), len (picture[0 ])
68
+ rows = [0 ] * m
69
+ cols = collections.defaultdict(list )
70
+ for i in range (m):
71
+ for j in range (n):
72
+ if picture[i][j] == ' B' :
73
+ rows[i] += 1
74
+ cols[j].append(i)
75
+ t = [[False ] * m for _ in range (m)]
76
+ for i in range (m):
77
+ for k in range (i, m):
78
+ if i == k:
79
+ t[i][k] = True
80
+ else :
81
+ t[i][k] = all ([picture[i][j] == picture[k][j] for j in range (n)])
82
+ t[k][i] = t[i][k]
83
+ res = 0
84
+ for i in range (m):
85
+ if rows[i] == target:
86
+ for j in range (n):
87
+ if len (cols[j]) == target and all ([t[i][k] for k in cols[j]]):
88
+ res += 1
89
+ return res
65
90
```
66
91
67
92
### ** Java**
68
93
69
94
<!-- 这里可写当前语言的特殊实现逻辑 -->
70
95
71
96
``` java
97
+ class Solution {
98
+ public int findBlackPixel (char [][] picture , int target ) {
99
+ int m = picture. length, n = picture[0 ]. length;
100
+ int [] rows = new int [m];
101
+ Map<Integer , List<Integer > > cols = new HashMap<> ();
102
+ for (int i = 0 ; i < m; ++ i) {
103
+ for (int j = 0 ; j < n; ++ j) {
104
+ if (picture[i][j] == ' B' ) {
105
+ ++ rows[i];
106
+ cols. computeIfAbsent(j, k - > new ArrayList<> ()). add(i);
107
+ }
108
+ }
109
+ }
110
+ boolean [][] t = new boolean [m][m];
111
+ for (int i = 0 ; i < m; ++ i) {
112
+ for (int k = i; k < m; ++ k) {
113
+ t[i][k] = i == k || all(picture[i], picture[k]);
114
+ t[k][i] = t[i][k];
115
+ }
116
+ }
117
+ int res = 0 ;
118
+ for (int i = 0 ; i < m; ++ i) {
119
+ if (rows[i] == target) {
120
+ for (int j = 0 ; j < n; ++ j) {
121
+ List<Integer > col = cols. get(j);
122
+ if (col != null && col. size() == target) {
123
+ boolean check = true ;
124
+ for (int k : col) {
125
+ check = check && t[i][k];
126
+ }
127
+ if (check) {
128
+ ++ res;
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return res;
135
+ }
136
+
137
+ private boolean all (char [] row1 , char [] row2 ) {
138
+ int n = row1. length;
139
+ for (int j = 0 ; j < n; ++ j) {
140
+ if (row1[j] != row2[j]) {
141
+ return false ;
142
+ }
143
+ }
144
+ return true ;
145
+ }
146
+ }
147
+ ```
148
+
149
+ ### ** C++**
150
+
151
+ ``` cpp
152
+ class Solution {
153
+ public:
154
+ int findBlackPixel(vector<vector<char >>& picture, int target) {
155
+ int m = picture.size(), n = picture[ 0] .size();
156
+ vector<int > rows(m);
157
+ unordered_map<int, vector<int >> cols;
158
+ for (int i = 0; i < m; ++i)
159
+ {
160
+ for (int j = 0; j < n; ++j)
161
+ {
162
+ if (picture[ i] [ j ] == 'B')
163
+ {
164
+ ++rows[ i] ;
165
+ cols[ j] .push_back(i);
166
+ }
167
+ }
168
+ }
169
+ vector<vector<bool >> t(m, vector<bool >(m, false));
170
+ for (int i = 0; i < m; ++i)
171
+ {
172
+ for (int k = i; k < m; ++k)
173
+ {
174
+ t[ i] [ k ] = i == k || all(picture[ i] , picture[ k] );
175
+ t[ k] [ i ] = t[ i] [ k ] ;
176
+ }
177
+ }
178
+ int res = 0;
179
+ for (int i = 0; i < m; ++i)
180
+ {
181
+ if (rows[ i] == target)
182
+ {
183
+ for (int j = 0; j < n; ++j)
184
+ {
185
+ if (cols[ j] .size() == target)
186
+ {
187
+ bool check = true;
188
+ for (int k : cols[ j] ) check = check && t[ i] [ k ] ;
189
+ if (check) ++res;
190
+ }
191
+ }
192
+ }
193
+ }
194
+ return res;
195
+ }
196
+
197
+ bool all(vector<char>& row1, vector<char>& row2) {
198
+ int n = row1.size();
199
+ for (int j = 0; j < n; ++j)
200
+ if (row1[j] != row2[j]) return false;
201
+ return true;
202
+ }
203
+ };
204
+ ```
205
+
206
+ ### ** Go**
207
+
208
+ ``` go
209
+ func findBlackPixel (picture [][]byte , target int ) int {
210
+ m , n := len (picture), len (picture[0 ])
211
+ rows := make ([]int , m)
212
+ cols := make (map [int ][]int )
213
+ for i := 0 ; i < m; i++ {
214
+ for j := 0 ; j < n; j++ {
215
+ if picture[i][j] == ' B' {
216
+ rows[i]++
217
+ cols[j] = append (cols[j], i)
218
+ }
219
+ }
220
+ }
221
+ t := make ([][]bool , m)
222
+ for i := 0 ; i < m; i++ {
223
+ t[i] = make ([]bool , m)
224
+ }
225
+ for i := 0 ; i < m; i++ {
226
+ for k := i; k < m; k++ {
227
+ if i == k {
228
+ t[i][k] = true
229
+ } else {
230
+ t[i][k] = all (picture[i], picture[k])
231
+ }
232
+ t[k][i] = t[i][k]
233
+ }
234
+ }
235
+ res := 0
236
+ for i := 0 ; i < m; i++ {
237
+ if rows[i] == target {
238
+ for j := 0 ; j < n; j++ {
239
+ col , ok := cols[j]
240
+ if ok && len (col) == target {
241
+ check := true
242
+ for _ , k := range col {
243
+ check = check && t[i][k]
244
+ }
245
+ if check {
246
+ res++
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ return res
253
+ }
72
254
255
+ func all (row1 , row2 []byte ) bool {
256
+ n := len (row1)
257
+ for i := 0 ; i < n; i++ {
258
+ if row1[i] != row2[i] {
259
+ return false
260
+ }
261
+ }
262
+ return true
263
+ }
73
264
```
74
265
75
266
### ** ...**
0 commit comments