n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
    52.N皇后 II——hard-回溯 - 图1
    上图为 8 皇后问题的一种解法。

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/n-queens-ii

    思路:
    51.N皇后 思路完全一致,只是返回结果不同。
    复杂度分析:
    时间复杂度O(N!)
    空间复杂度O(N)

    1. var totalNQueens = function (n) {
    2. let ans = [];
    3. let board = new Array(n).fill(undefined).map(() => {
    4. return new Array(n).fill(".");
    5. });
    6. let cols = new Set();
    7. let dia1 = new Set();
    8. let dia2 = new Set();
    9. const dfs = (row) => {
    10. if (row === n) {
    11. const cur = board.slice();
    12. for (let i = 0; i < n; i++) {
    13. cur[i] = cur[i].join("");
    14. }
    15. ans.push(cur);
    16. return;
    17. }
    18. for (let col = 0; col < n; col++) {
    19. if (!cols.has(col) && !dia1.has(row + col) && !dia2.has(row - col)) {
    20. board[row][col] = "Q";
    21. cols.add(col);
    22. dia1.add(row + col);
    23. dia2.add(row - col);
    24. dfs(row + 1);
    25. board[row][col] = ".";
    26. cols.delete(col);
    27. dia1.delete(row + col);
    28. dia2.delete(row - col);
    29. }
    30. }
    31. };
    32. dfs(0);
    33. return ans.length;
    34. };