java
class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> res = new ArrayList<>();
char[][] tmp = new char[n][n];
for (int i = 0; i < n; ++i) {
Arrays.fill(tmp[i], '.');
}
dfs(tmp, 0, res);
return res;
}
public void dfs(char[][] tmp, int layer, List<List<String>> res) {
int n = tmp.length;
if (layer == n) {
List<String> solu = new ArrayList<>();
for (int k = 0; k < n; ++k) {
solu.add(String.valueOf(tmp[k]));
}
res.add(solu);
return;
}
for (int k = 0; k < n; ++k) {
if (isValid(tmp, layer, k)) {
tmp[layer][k] = 'Q';
dfs(tmp, layer + 1, res);
tmp[layer][k] = '.';
}
}
}
boolean isValid(char[][] tmp, int x, int y) {
int n = tmp.length;
for (int i = 0; i < n; ++i) {
if (tmp[i][y] == 'Q' && i < x) {
return false;
}
}
int i = 1;
while (x - i >= 0 && y - i >= 0) {
if (tmp[x - i][y - i] == 'Q') {
return false;
}
++i;
}
i = 1;
while (x - i >= 0 && y + i < n) {
if (tmp[x - i][y + i] == 'Q') {
return false;
}
++i;
}
return true;
}
}