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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Solution { public List<List<String>> solveNQueens(int n) { List<List<String>> list = new ArrayList<>();
char[][] board = new char[n][n]; for (int i = 0; i < n; i++) { Arrays.fill(board[i], '.'); }
backtrack(list, board, 0); return list; }
private void backtrack(List<List<String>> list, char[][] board, int rowIndex) { if (rowIndex == board.length) { List<String> rowList = new ArrayList<>(board.length); for (char[] line : board) { rowList.add(new String(line)); } list.add(rowList); return; }
for (int j = 0; j < board.length; j++) { if (canFill(board, rowIndex, j)) { board[rowIndex][j] = 'Q'; backtrack(list, board, rowIndex + 1); board[rowIndex][j] = '.'; } } }
private boolean canFill(char[][] used, int i, int j) { for (int k = 0; k < i; k++) { if (used[k][j] == 'Q') { return false; } }
for (int x = i - 1, y = j - 1; x >= 0 && y >= 0; x--, y--) { if (used[x][y] == 'Q') { return false; } } for (int x = i - 1, y = j + 1; x >= 0 && y < used.length; x--, y++) { if (used[x][y] == 'Q') { return false; } }
return true; } }
|