)
解题思路每次进入backtracking都表示进入下一行每个backtracking中处理当前行的各个列看各列是否合法isValid中因为是一行一行向下遍历的所以对应的当前行一定满足条件没有放置过其他皇后只需要看对应的列是否满足即可是否符合需要看左上45°和右上45°之所以是往上看是因为只有上才有先前放置过的皇后注意终止条件row n而不是row n-1row 表示当前准备放皇后的行。当 row n-1时最后一行还没放皇后class Solution { ListListString res new ArrayList(); public ListListString solveNQueens(int n) { char[][] board new char[n][n]; for (char[] c : board) { Arrays.fill(c, .); } backtracking(board, n, 0); return res; } public void backtracking(char[][] board, int n, int row) { if (row n) { res.add(formatConversion(board)); return; } for (int i 0; i n; i) { // i表示在当前row保持不变时的各个列 if (isValid(board, n, row, i)) { board[row][i] Q; backtracking(board, n, row 1); board[row][i] .; } } } public ListString formatConversion(char[][] board) { ListString list new ArrayList(); for (char[] c : board) { String s new String(c); list.add(s); } return list; } public boolean isValid(char[][] board, int n, int row, int col) { for (int i 0; i row; i) { if (board[i][col] Q) return false; } for (int i row - 1, j col - 1; i 0 j 0; i--, j--) { if (board[i][j] Q) return false; } for (int i row - 1, j col 1; i 0 j n - 1; i--, j) { if (board[i][j] Q) return false; } return true; } }