n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例 1:
输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1输出:[["Q"]]
提示:
1 <= n <= 9
解法一:回溯
function solveNQueens(n: number): string[][] {//let res :Array<Array<number>> = []let cols : Set<number> = new Set()let pies : Set<number> = new Set()let nas :Set<number> = new Set()function recursion(row: number, list:Array<number>) {if (row === n) {res.push([...list])return}for(let col = 0 ; col < n; col ++) {// 列、撇、捺 中是否存在if (cols.has(col) || pies.has(row + col) || nas.has(row-col)) {continue}cols.add(col)pies.add(row+col)nas.add(row - col)list.push(col)recursion(row + 1, list)cols.delete(col)pies.delete(row + col)nas.delete(row - col)list.pop()}}recursion(0, [])// console.log(res)function genStr(nums: Array<Array<number>>, n : number): Array<Array<string>> {return nums.map(list => list.map(i => '.'.repeat(i) + "Q" + ".".repeat( n - i - 1)))}return genStr(res, n)};
