Skip to content

Commit 067fabe

Browse files
committed
feat: add solutions to lc problem: No.0533.Lonely Pixel II
1 parent a96fe84 commit 067fabe

File tree

6 files changed

+566
-11
lines changed

6 files changed

+566
-11
lines changed

solution/0500-0599/0533.Lonely Pixel II/README.md

+193-2
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,218 @@ N = 3
4949

5050
<p>&nbsp;</p>
5151

52-
5352
## 解法
5453

5554
<!-- 这里可写通用的实现逻辑 -->
5655

56+
“哈希表”实现。
57+
5758
<!-- tabs:start -->
5859

5960
### **Python3**
6061

6162
<!-- 这里可写当前语言的特殊实现逻辑 -->
6263

6364
```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
6590
```
6691

6792
### **Java**
6893

6994
<!-- 这里可写当前语言的特殊实现逻辑 -->
7095

7196
```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+
}
72254

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+
}
73264
```
74265

75266
### **...**

0 commit comments

Comments
 (0)