题目描述
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
示例 1:

1 2 3
   | 输入:n = 4 输出:2 解释:如上图所示,4 皇后问题存在两个不同的解法。
   | 
 
示例 2:
提示:
题目思路
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
   | class Solution {     public int totalNQueens(int n) {         int[] queens = new int[n];         Arrays.fill(queens, -1);         List<List<String>> solutions = new ArrayList<List<String>>();         solve(solutions, queens, n, 0, 0, 0, 0);         return solutions.size();     }
      public void solve(List<List<String>> solutions, int[] queens, int n, int row, int columns, int diagonals1, int diagonals2) {         if (row == n) {             List<String> board = generateBoard(queens, n);             solutions.add(board);         } else {             int availablePositions = ((1 << n) - 1) & (~(columns | diagonals1 | diagonals2));             while (availablePositions != 0) {                 int position = availablePositions & (-availablePositions);                 availablePositions = availablePositions & (availablePositions - 1);                 int column = Integer.bitCount(position - 1);                 queens[row] = column;                 solve(solutions, queens, n, row + 1, columns | position, (diagonals1 | position) << 1, (diagonals2 | position) >> 1);                 queens[row] = -1;             }         }     }
      public List<String> generateBoard(int[] queens, int n) {         List<String> board = new ArrayList<String>();         for (int i = 0; i < n; i++) {             char[] row = new char[n];             Arrays.fill(row, '.');             row[queens[i]] = 'Q';             board.add(new String(row));         }         return board;     } }
  |