The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where'Q'and'.'both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
import java.util.ArrayList;
public class Solution {
private boolean valid(int[] q, int k) {
for (int i = 1; i < k; i++) {
if (q[i] == q[k] || Math.abs(q[i] - q[k]) == Math.abs(i - k))
return false;
}
return true;
}
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> queues = new ArrayList<>();
int[] q = new int[n+1];
int k = 1;
while (k >= 1) {
q[k]++;
while (q[k] <= n && !valid(q, k)) {
q[k]++;
}
if (q[k] <= n && k == n) {
char[][] queue = new char[n][n];
for (int row = 0; row < n; row++) {
for (int col = 0; col < n; col++) {
if (q[row+1] == col+1) {
queue[row][col] = 'Q';
} else {
queue[row][col] = '.';
}
}
}
String[] result = new String[n];
for (int i = 0; i < n; i++) {
result[i] = new String(queue[i]);
}
queues.add(result);
} else if (q[k] <= n && k < n) {
k++;
} else {
q[k] = 0;
k--;
}
}
return queues;
}
}