题目:
分析:
这道题和前一道——N皇后| 极其相似,唯一的不同点就是把返回值改为了int型,返回有多少种解法
我们依然可以用回溯法来做
图解就不再做了,可以参考我之前关于N皇后的文章
代码:
class Solution {
//用来存储最后结果
private int count=0;
public int totalNQueens(int n) {
HelpToSolveNQueens(n,new ArrayList<Integer>(),new ArrayList<Integer>(),new ArrayList<Integer>());
return count;
}
//递归函数
//queen用于存储每一行中皇后所在的列
//sum用于判断已有皇后的左对角线是否有重合
//diff用于判断已有皇后的右对角线是否有重合
public void HelpToSolveNQueens(int n,List<Integer> queen,List<Integer> sum,List<Integer> diff){
if(queen.size()==n){
count++;
return;
}
for(int i=1;i<=n;i++){
int temp_sum=queen.size()+i+1;
int temp_diff=queen.size()+1-i;
if((!queen.contains(i)) && (!sum.contains(temp_sum)) && (!diff.contains(temp_diff))){
queen.add(i);
sum.add(temp_sum);
diff.add(temp_diff);
HelpToSolveNQueens(n,queen,sum,diff);
queen.remove(queen.size()-1);
sum.remove(sum.size()-1);
diff.remove(diff.size()-1);
}
}
}
}