Skip to content

Commit 68b223a

Browse files
authored
Update 51. N-Queens
1 parent 87af174 commit 68b223a

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

51. N-Queens

+27-25
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,48 @@ class Solution {
22
List<List<String>> result;
33
public List<List<String>> solveNQueens(int n) {
44
result = new ArrayList<>();
5-
//Take a board. .Q
65
char[][] board = new char[n][n];
7-
for(int i =0; i < n; i++) {
6+
7+
//Filled it as empty cells
8+
for(int i = 0; i < n; i++){
89
for(int j = 0; j < n; j++) {
910
board[i][j] = '.';
1011
}
1112
}
12-
List<int[]> queenPos = new ArrayList<>();
13-
dfs(board, 0, queenPos);
13+
14+
List<int[]> queens = new ArrayList<>();
15+
dfs(board, 0, queens);
1416
return result;
1517
}
1618

17-
private void dfs(char[][] board, int row, List<int[]> queenPos) {
18-
//Chaeck if we have placed all the queens
19-
if(queenPos.size() == board.length) {
20-
//Construct the result
21-
List<String> rowData = new ArrayList<>();
22-
for(char[] c : board){
23-
rowData.add(new String(c));
19+
private void dfs(char[][] board, int r, List<int[]> queens) {
20+
//Check if all queens are placed
21+
if(queens.size() == board.length) {
22+
//Construct output
23+
List<String> rows = new ArrayList<>();
24+
for(char[] row : board) {
25+
rows.add(new String(row));
2426
}
25-
result.add(rowData);
27+
result.add(rows);
2628
}
2729

28-
//Try adduing Queen at row, col
29-
for(int col = 0; col < board.length; col++) {
30-
if(canAddQueen(queenPos, row, col)) {
31-
board[row][col] = 'Q';
32-
queenPos.add(new int[]{row, col});
33-
dfs(board, row+1, queenPos);
34-
board[row][col] = '.';
35-
queenPos.remove(queenPos.size()-1);
30+
//Try adding the queen
31+
for(int c = 0; c < board.length; c++) {
32+
if(canAddQueen(r,c,queens)) {
33+
board[r][c] = 'Q';
34+
queens.add(new int[]{r,c});
35+
dfs(board, r+1, queens);
36+
board[r][c] = '.';
37+
queens.remove(queens.size()-1);
3638
}
3739
}
3840
}
3941

40-
private boolean canAddQueen(List<int[]> queenPos, int row, int col) {
41-
for(int[] pair : queenPos) {
42-
int dx = Math.abs(pair[0]- row);
43-
int dy = Math.abs(pair[1]- col);
44-
if(dx==0 || dy == 0 || dx == dy) return false;
42+
private boolean canAddQueen(int r, int c, List<int[]> queens) {
43+
for(int[] q : queens) {
44+
int dx = Math.abs(r-q[0]);
45+
int dy = Math.abs(c-q[1]);
46+
if(dx==0 || dy==0 || dx==dy) return false;
4547
}
4648
return true;
4749
}

0 commit comments

Comments
 (0)