forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathN-Queens.js
28 lines (24 loc) · 863 Bytes
/
N-Queens.js
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
// time O(n!) | space O(n^n)
var solveNQueens = function(n) {
let res = [];
function backtrack(board, r) {
if (r === n) {
// - 1 to account for adding a Q that takes up a space
res.push(board.map((c) => '.'.repeat(c) + 'Q' + '.'.repeat(n - c - 1)));
return;
}
for (let c = 0; c < n; c++) {
// bc is the current element
// br is the index of the element bc
//
// bc === c | checks row and col
// bc === c - r + br | checks lower diagonal
// bc === c + r - br | checks upper diagonal
if (!board.some((bc, br) => bc === c || bc === c - r + br || bc === c + r - br)) {
backtrack(board.concat(c), r + 1);
}
}
}
backtrack([], 0);
return res;
};