#52hard
code1:原理同一篇
class Solution {
int res;
public int totalNQueens(int n) {
this.res=0;
boolean[] cols=new boolean[n];
boolean[] diag=new boolean[2*n];
boolean[] anti_diag=new boolean[2*n];
helper(n,0,cols,diag,anti_diag);
return res;
}
public void helper(int n,int row,boolean[] cols,boolean[] diag,boolean[] anti_diag){
if(row==n)
++res;
for(int col=0;col<n;col++){
int idx1=row-col+n,idx2=row+col;
if(cols[col] || diag[idx1] || anti_diag[idx2])
continue;
cols[col]=true;
diag[idx1]=true;
anti_diag[idx2]=true;
helper(n,row+1,cols,diag,anti_diag);
cols[col]=false;
diag[idx1]=false;
anti_diag[idx2]=false;
}
}
}