题目:
按照国际象棋的规则,皇后可以与之处在同一行或同一列或同一斜线上的棋子。
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
示例 1:
输入:n = 4
输出:[[“.Q..”,”…Q”,”Q…”,”..Q.”],[“..Q.”,”Q…”,”…Q”,”.Q..”]]
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:[[“Q”]]
代码实现:
class Solution {
public List> solveNQueens(int n) {
List> solutions = new ArrayList>();
int[] queens = new int[n];
Arrays.fill(queens, -1);
Set columns = new HashSet();
Set diagonals1 = new HashSet();
Set diagonals2 = new HashSet();
backtrack(solutions, queens, n, 0, columns, diagonals1, diagonals2);
return solutions;
}
public void backtrack(List> solutions, int[] queens, int n, int row, Set columns, Set diagonals1, Set diagonals2) {
if (row == n) {
List board = generateBoard(queens, n);
solutions.add(board);
} else {
for (int i = 0; i generateBoard(int[] queens, int n) {
List board = new ArrayList();
for (int i = 0; i
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net