Skip to content

Commit d017657

Browse files
authored
Update 1284-minimum-number-of-flips-to-convert-binary-matrix-to-zero-matrix.js
1 parent c413b74 commit d017657

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

1284-minimum-number-of-flips-to-convert-binary-matrix-to-zero-matrix.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,47 @@
1+
/**
2+
* @param {number[][]} mat
3+
* @return {number}
4+
*/
5+
const minFlips = function (mat) {
6+
let start = 0
7+
const m = mat.length, n = mat[0].length
8+
for (let i = 0; i < m; i++) {
9+
for (let j = 0; j < n; j++) {
10+
start |= mat[i][j] << (i * n + j)
11+
}
12+
}
13+
let q = [start]
14+
const seen = new Set(), dirs = [[-1, 0], [1, 0], [0, -1], [0, 1], [0, 0]]
15+
16+
for(let i = 0; q.length; i++) {
17+
const tmp = []
18+
for (let size = q.length; size > 0; size--) {
19+
const cur = q.pop()
20+
if(cur === 0) return i
21+
for(let i = 0; i < m; i++) {
22+
for(let j = 0; j < n; j++) {
23+
let next = cur
24+
for(const [dx, dy] of dirs) {
25+
const r = i + dx, c = j + dy
26+
if(r >= 0 && r < m && c >= 0 && c < n) {
27+
next ^= (1 << (r * n + c))
28+
}
29+
}
30+
if (!seen.has(next)) {
31+
seen.add(next)
32+
tmp.push(next)
33+
}
34+
}
35+
}
36+
}
37+
q = tmp
38+
}
39+
40+
return -1
41+
}
42+
43+
// another
44+
145
/**
246
* @param {number[][]} mat
347
* @return {number}

0 commit comments

Comments
 (0)