Skip to content

Commit 02eb363

Browse files
51. N-Queens (java)
1 parent 9a50004 commit 02eb363

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

solution/0051.N-Queens/Solution.java

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
private List<List<String>> solutions;
3+
private char[][] nQueens;
4+
private boolean[] colUsed;
5+
private boolean[] diagonals45Used;
6+
private boolean[] diagonals135Used;
7+
private int n;
8+
9+
public List<List<String>> solveNQueens(int n) {
10+
solutions = new ArrayList<>();
11+
nQueens = new char[n][n];
12+
for (int i = 0; i < n; i++) Arrays.fill(nQueens[i], '.');
13+
colUsed = new boolean[n];
14+
diagonals45Used = new boolean[(2 * n) - 1];
15+
diagonals135Used = new boolean[(2 * n) - 1];
16+
this.n = n;
17+
backtracking(0);
18+
return solutions;
19+
}
20+
21+
private void backtracking(int row) {
22+
if (row == n) {
23+
List<String> list = new ArrayList<>();
24+
for (char[] chars : nQueens) list.add(new String(chars));
25+
solutions.add(list);
26+
return;
27+
}
28+
for (int col = 0; col < n; col++) {
29+
int diagonals45Idx = row + col;
30+
int diagonals135Idx = n - 1 - (row - col);
31+
if (colUsed[col] || diagonals45Used[diagonals45Idx] || diagonals135Used[diagonals135Idx]) continue;
32+
nQueens[row][col] = 'Q';
33+
colUsed[col] = diagonals45Used[diagonals45Idx] = diagonals135Used[diagonals135Idx] = true;
34+
backtracking(row + 1);
35+
colUsed[col] = diagonals45Used[diagonals45Idx] = diagonals135Used[diagonals135Idx] = false;
36+
nQueens[row][col] = '.';
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)