51. N 皇后
class Solution {
public List<List<String>> solveNQueens(int n) {
char[][] blanks=generateBlanks(n);
List<List<String>> res=new ArrayList<>();
dfs(blanks,res,0);
return res;
}
public void dfs(char[][] blanks, List<List<String>> res,int start){
int m=blanks.length;
int n=blanks[0].length;
if(start==m){
res.add(generateRes(blanks));
return;
}
for(int i=0;i<n;i++){
if(isValid(blanks,start,i)){
blanks[start][i]='Q';
dfs(blanks,res,start+1);
blanks[start][i]='.';
}
}
}
public boolean isValid(char[][] blanks,int i,int j){
if(i<0||j<0||i>=blanks.length||j>=blanks[0].length||blanks[i][j]=='Q'){
return false;
}
for(int k=1;k<=i;k++){
if(i-k>=0&&j-k>=0&&blanks[i-k][j-k]=='Q'){
return false;
}
}
for(int k=1;k<=i;k++){
if(i-k>=0&&j+k<blanks[0].length&&blanks[i-k][j+k]=='Q'){
return false;
}
}
for(int k=0;k<i;k++){
if(blanks[k][j]=='Q'){
return false;
}
}
return true;
}
public char[][] generateBlanks(int n){
char[][] blanks=new char[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
blanks[i][j]='.';
}
}
return blanks;
}
public List<String> generateRes(char[][] blanks){
List<String> path=new ArrayList<>();
for(int i=0;i<blanks.length;i++){
StringBuilder sb=new StringBuilder();
for(int j=0;j<blanks[0].length;j++){
sb.append(blanks[i][j]);
}
path.add(sb.toString());
}
return path;
}
}