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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| class Solution {
List<List<String>> res = new ArrayList<>();
public List<List<String>> solveNQueens(int n) { char[][] board = new char[n][n]; for (char[] c : board) { Arrays.fill(c, '.'); } backtrack(board, 0); return res; }
public void backtrack(char[][] board, int row) { if (row == board.length) { res.add(charToList(board)); return; }
int n = board[row].length; for (int col = 0; col < n; col++) { if (!isValid(board, row, col)) { continue; } board[row][col] = 'Q'; backtrack(board, row + 1); board[row][col] = '.'; } }
public boolean isValid(char[][] board, int row, int col) { int n = board.length; for (int i = 0; i < n; i++) { if (board[i][col] == 'Q') { return false; } }
for (int i = row - 1, j = col + 1; i >=0 && j < n; i--, j++) { if (board[i][j] == 'Q') { return false; } }
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) { if (board[i][j] == 'Q') { return false; } } return true; }
public List charToList(char[][] board) { List<String> list = new ArrayList<>();
for (char[] c : board) { list.add(String.copyValueOf(c)); } return list; } }
|