n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例 1:

js
- 输入:n = 4
- 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
- 解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
js
- 输入:n = 1
- 输出:[["Q"]]
js
/**
 * @param {number} n
 * @return {string[][]}
 */
var solveNQueens = function (n) {
  let result = [];
  // 初始化棋盘
  let chessBoard = new Array(n).fill([]).map(() => new Array(n).fill('.'));
  function backtrack(chessBoard, row) {
    if (row === n) {
      // end 终止条件
      result.push(chessBoard.map((item) => item.join(''))); // 推入res数组
      return;
    }
    for (let col = 0; col < n; col++) {
      // isVaild
      if (!isVaild(chessBoard, row, col)) continue;
      chessBoard[row][col] = 'Q';
      backtrack(chessBoard, row + 1);
      chessBoard[row][col] = '.';
    }
  }
  // 皇后不能处于同一行 同一列 统一斜角上!
  function isVaild(chessBoard, row, col) {
    // 之前的行
    for (let i = 0; i < row; i++) {
      // 所有的列
      for (let j = 0; j < n; j++) {
        if (
          chessBoard[i][j] == 'Q' && // 发现了皇后,并且和自己同列/对角线
          (j === col || i === row || i + j === row + col || i - j === row - col)
        ) {
          return false; // 不是合法的选择
        }
      }
    }
    return true;
  }
  backtrack(chessBoard, 0);
  console.log(result);
  return result;
};