Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路:还是回溯,只不过把打印结果换成计数即可。
class Solution {
int sum = 0;
public boolean test(int[] loc,int x,int y){
for(int i = 0;i<loc.length;i++){
if(Math.abs(i-x)==Math.abs(y-loc[i])||y==loc[i]){
return false;
}
}
return true;
}
public void save(){
sum++;
}
public void dfs(int c,int n,int[] loc){
if(c>=n){
save();
}else{
for(int i = 0;i<n;i++){
if(test(loc,c,i)){
loc[c] = i;
dfs(c+1,n,loc);
loc[c] = -111;
}
}
}
}
public int totalNQueens(int n) {
int[] loc = new int[n];
for(int i = 0;i<n;i++){
loc[i] = -111;
}
dfs(0,n,loc);
return sum;
}
}