N-Queens LeetCode solution in JavaScript

1
var solveNQueens = function (n) {
2
const board = new Array(n).fill().map(() => new Array(n).fill("."));
3

4
const result = [];
5
const pushToResult = () =>
6
result.push(board.map((row) => row.reduce((acc, val) => acc + val, "")));
7

8
const isQueenPlaced = (i, j) => {
9
if (i < 0 || j < 0) return false;
10
if (i >= n || j >= n) return false;
11
return board[i][j] !== ".";
12
};
13
const isAttacked = (i, j) => {
14
const isSameDiagonalLeft = () => {
15
let p = i;
16
let q = j;
17
while (p >= 0 && q >= 0) {
18
if (isQueenPlaced(p, q)) return true;
19
p -= 1;
20
q -= 1;
21
}
22
return false;
23
};
24
const isSameDiagonalRight = () => {
25
let p = i;
26
let q = j;
27
while (p >= 0 && q < n) {
28
if (isQueenPlaced(p, q)) return true;
29
p -= 1;
30
q += 1;
31
}
32
return false;
33
};
34

35
return isSameDiagonalLeft() || isSameDiagonalRight();
36
};
37

38
let rowsPlaced = {};
39
let colPlaced = {};
40
const backtrack = (i = 0, j = 0, queensPlaced = 0) => {
41
if (queensPlaced === n) return pushToResult();
42
if (i >= n || j >= n) return;
43
if (rowsPlaced[i]) return;
44
if (colPlaced[j]) return backtrack(i, j + 1, queensPlaced);
45

46
if (!isAttacked(i, j)) {
47
rowsPlaced[i] = true;
48
colPlaced[j] = true;
49
board[i][j] = "Q";
50
backtrack(i + 1, 0, queensPlaced + 1);
51
board[i][j] = ".";
52
colPlaced[j] = false;
53
rowsPlaced[i] = false;
54
}
55

56
return backtrack(i, j + 1, queensPlaced);
57
};
58
backtrack();
59

60
return result;
61
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0