n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens-ii
思路:
与 51.N皇后 思路完全一致,只是返回结果不同。
复杂度分析:
时间复杂度O(N!)
空间复杂度O(N)
var totalNQueens = function (n) {let ans = [];let board = new Array(n).fill(undefined).map(() => {return new Array(n).fill(".");});let cols = new Set();let dia1 = new Set();let dia2 = new Set();const dfs = (row) => {if (row === n) {const cur = board.slice();for (let i = 0; i < n; i++) {cur[i] = cur[i].join("");}ans.push(cur);return;}for (let col = 0; col < n; col++) {if (!cols.has(col) && !dia1.has(row + col) && !dia2.has(row - col)) {board[row][col] = "Q";cols.add(col);dia1.add(row + col);dia2.add(row - col);dfs(row + 1);board[row][col] = ".";cols.delete(col);dia1.delete(row + col);dia2.delete(row - col);}}};dfs(0);return ans.length;};
