class {
public List<List<String>> solveNQueens(int n) {
List<List<String>> res = new ArrayList<>();
List<Integer> board = new ArrayList<>();
dfs(res, board, n);
return res;
}
private List<String> draw(List<Integer> board) {
List<String> res = new ArrayList<>();
int n = board.size();
for (int i = 0; i < board.size(); i++) {
char[] chs = new char[n];
Arrays.fill(chs, '.');
chs[board.get(i)] = 'Q';
res.add(new String(chs));
}
return res;
}
private boolean isValid(List<Integer> board) {
if (board.size() == 0) {
return true;
}
for (int i = 0; i < board.size() - 1; i++) {
for (int j = i + 1; j < board.size(); j++) {
if (board.get(i) == board.get(j)) return false;
if (i + board.get(i) == j + board.get(j)) return false;
if (j - i == board.get(j) - board.get(i)) return false;
}
}
return true;
}
private void dfs(List<List<String>> res, List<Integer> board, int n) {
if (!isValid(board)) {
return;
}
if (board.size() == n) {
List<String> solution = draw(board);
res.add(solution);
return;
}
for (int i = 0; i < n; i++) {
if (board.contains(i)) {
continue;
}
board.add(i);
dfs(res, board, n);
board.remove(board.size() - 1);
}
}
}
近期评论