# [52] N皇后 II

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4

输出: 2

解释: 4 皇后问题存在如下两个不同的解法。 [

[".Q..", "...Q", "Q...", "..Q."],

["..Q.", "Q...", "...Q", ".Q.."]

]

var totalNQueens = function(n) {
  let res = 0;
  const map = Array(n)
    .fill('')
    .map(x => Array(n).fill('.'));
  backtrack(map, 0);
  return res;

  function backtrack(map, row) {
    if (row >= n) {
      res += 1;
      return;
    }

    for (let col = 0; col < n; col++) {
      if (isValid(map, row, col)) {
        map[row][col] = 'Q';
        backtrack(map, row + 1);
        map[row][col] = '.';
      }
    }
  }

  function isValid(map, row, col) {
    let i = row - 1;
    let topLeft = col - 1;
    let topRight = col + 1;
    while (i >= 0) {
      if (map[i][topLeft] === 'Q' || map[i][col] === 'Q' || map[i][topRight] === 'Q') return false;
      i--;
      topLeft--;
      topRight++;
    }

    return true;
  }
};