N-Queens II LeetCode solution in JavaScript

1
/**
2
* @param {number} n
3
* @return {number}
4
*/
5
var totalNQueens = function (n) {
6
// Keep track of columns with queens
7
const cols = new Set();
8
// Keep track of positive slope diagonal by storing row number + column number
9
const posDiag = new Set();
10
// Keep track of negative slope diagonal by storing row number - column number
11
const negDiag = new Set();
12
// Count of valid boards
13
let count = 0;
14

15
const backtrack = function (r) {
16
// Base case to end recursion, we have traversed board and found valid position in each row
17
if (r === n) {
18
count += 1;
19
return;
20
}
21
// Loop through each column to see if you can place a queen
22
for (let c = 0; c < n; c++) {
23
// invalid position check, if position in set we cannot place queen here
24
if (cols.has(c) || posDiag.has(r + c) || negDiag.has(r - c)) continue;
25

26
// add new queen to sets
27
cols.add(c);
28
posDiag.add(r + c);
29
negDiag.add(r - c);
30

31
// backtrack
32
backtrack(r + 1);
33

34
// remove current position from sets because backtracking for this position is complete
35
cols.delete(c);
36
posDiag.delete(r + c);
37
negDiag.delete(r - c);
38
}
39
};
40

41
backtrack(0);
42
return count;
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0