File tree 1 file changed +39
-0
lines changed
1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments