public class Solution {
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> res = new ArrayList<String[]>();
dfs(n,0,new int[n],res);
return res;
}
public void dfs(int n,int row,int[]QueenList,ArrayList<String[]> res){
if(row==n){
String[] output= new String[n];
for(int i=0;i<n;i++){
StringBuilder sb = new StringBuilder();
for(int j=0;j<n;j++){
if(j==QueenList[i]){
sb.append('Q');
}else{
sb.append('.');
}
}
output[i] = sb.toString();
}
res.add(output);
}
for(int col=0;col<n;col++){
if(isSafe(n,row,col,QueenList)){
QueenList[row] = col;
dfs(n,row+1,QueenList,res);
}
}
}
public boolean isSafe(int n,int row,int col,int QueenList[]){
for(int preRow=0;preRow<row;preRow++){
int preCol = QueenList[preRow];
if(preCol==col){
return false;
}else if(Math.abs(preCol-col)==row-preRow){
return false;
}
}
return true;
}
}