Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
找出N皇后的解的个数,依然DFS
public class Solution {
private int res=0;
public int totalNQueens(int n) {
char[][] chars = new char[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
chars[i][j]='.';
}
}
dfs(chars,0,n);
return res;
}
private void dfs(char[][] chars,int index,int n){
if(index==n){
res++;
return;
}
for(int i=0;i<chars[index].length;i++){
if(check(chars,index,i)){
chars[index][i]='Q';
dfs(chars,index+1, n);
chars[index][i]='.';
}
}
}
private boolean check(char[][] chars, int index, int pivot) {
for(int i=0;i<index;i++){
if(chars[i][pivot]=='Q')
return false;
}
for(int i=index-1, j=pivot-1;i>=0&&j>=0;i--,j--){
if(chars[i][j]=='Q')
return false;
}
for(int i=index-1, j=pivot+1;i>=0&&j<chars[i].length;i--,j++){
if(chars[i][j]=='Q')
return false;
}
return true;
}
}