链接:https://leetcode-cn.com/problems/n-queens
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
递归
/**
* @param {number} n
* @return {string[][]}
*/
var solveNQueens = function(n) {
// 创建棋盘
const board = new Array(n)
for (let i = 0; i < n; i++) {
board[i] = new Array(n).fill('.');
}
const cols = new Set(), diag1 = new Set(), diag2 = new Set(), res = [];
const solve = (r) => {
if (r == n) {
const __board = board.slice();
for (let i = 0; i < n; i++) {
__board[i] = __board[i].join('');
}
res.push(__board)
return
}
for (let c = 0; c < n; c++) {
if (!cols.has(c) && !diag1.has(r + c) && !diag2.has(r - c)) {
board[r][c] = 'Q';
cols.add(c);
diag1.add(r + c);
diag2.add(r - c);
solve(r + 1);
board[r][c] = '.';
cols.delete(c);
diag1.delete(r + c);
diag2.delete(r - c);
}
}
}
solve(0)
return res
};