编辑代码

function solveNQueens(n) {
  const res = [];
  const board = Array.from({ length: n }, () => Array.from({ length: n }, () => '.'));
  const cols = new Set();
  const diag1 = new Set();
  const diag2 = new Set();

  function backtrack(row) {
    if (row === n) {
      res.push(board.map((r) => r.join('')));
      return;
    }
    for (let col = 0; col < n; col++) {
      if (cols.has(col) || diag1.has(col - row) || diag2.has(col + row)) {
        continue;
      }
      board[row][col] = 'Q';
      cols.add(col);
      diag1.add(col - row);
      diag2.add(col + row);
      backtrack(row + 1);
      board[row][col] = '.';
      cols.delete(col);
      diag1.delete(col - row);
      diag2.delete(col + row);
    }
  }

  backtrack(0);
  return res;
}

console.log(solveNQueens(8));