1
// Simple backtracking logic, try out each row and col and check position is valid or not.2
// since we are going row one by one, there is no way queen is placed in that row.3
// so, we need to check col, diagonals for valid position.4
// col is straightforward flag for each column18
// negative numbers are not allowed as index, so we add n - 1 to diagonal2.21
List<List<String>> ans = new LinkedList<>();24
public List<List<String>> solveNQueens(int n) {26
int[][] board = new int[n][n];28
boolean[] col = new boolean[n];29
boolean[] dia1 = new boolean[2 * n];30
boolean[] dia2 = new boolean[2 * n];32
solve(0, col, dia1, dia2, board);37
public void solve(int row, boolean[] col, boolean[] dia1, boolean[] dia2, int[][] board) {39
copyBoardToAns(board);42
// brute force all col in that row43
for (int i = 0; i < n; i++) {44
if (isValid(col, dia1, dia2, i, row)) {47
dia2[row - i + n - 1] = true;49
solve(row + 1, col, dia1, dia2, board);51
dia1[row + i] = false;52
dia2[row - i + n - 1] = false;58
public boolean isValid(boolean[] col, boolean[] dia1, boolean[] dia2, int curCol, int curRow) {59
return !col[curCol] && !dia1[curCol + curRow] && !dia2[curRow - curCol + n - 1];62
public void copyBoardToAns(int[][] board) {63
List<String> res = new LinkedList<>();64
for (int i = 0; i < n; i++) {66
for (int j = 0; j < n; j++) {67
if (board[i][j] == 1) {