1 /**
2 * @param {number} n
3 * @return {string[][]}
4 */
5 const solveNQueens = function (n) {
6 const ans = [];
7 const initialMap = Array.from(Array(n), item => new Array(n).fill('.'));
8 const canUse = function (zmap, row, col) {
9 for (let i = 0; i < row; i++) {
10 if (zmap[i][col] === 'Q') {
11 return false;
12 }
13 if (col - row + i >= 0 && zmap[i][col - row + i] === 'Q') {
14 return false;
15 }
16 if (col + row - i < n && zmap[i][col + row - i] === 'Q') {
17 return false;
18 }
19 }
20 return true;
21 };
22 const dps = function (zmap, row) {
23 if (row === n) {
24 ans.push(zmap.map(item => item.join('')));
25 } else {
26 for (let k = 0; k < n; k++) {
27 if (canUse(zmap, row, k)) {
28 const newMap = JSON.parse(JSON.stringify(zmap));
29 newMap[row][k] = 'Q';
30 dps(newMap, row + 1);
31 }
32 }
33 }
34 };
35 dps(initialMap, 0);
36 return ans;
37 };