题目描述:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路解析:
- 跟第一个题一样的解决方法,但是需要注意的是这个是计数,计数的话要用数组,因为数组就会更新里面的值。
- 如果行数等于总行数,就可以在解决方案的计数上加1了
- 如果合法的话才会递归下一行
代码:
public class Solution {
public int totalNQueens(int n) {
int[] res = {0};
if(n<=0)
return res[0];
int[] columnVal = new int[n];
DFS_helper(res,n,0,columnVal);
return res[0];
}
public void DFS_helper(int[] res,int nQueens,int row,int[] columnVal){
if(row == nQueens){
res[0]++;
}else{
for(int i=0;i<nQueens;i++){
columnVal[row]=i;
if(isValid(row,columnVal)){
DFS_helper(res,nQueens,row+1,columnVal);
}
}
}
}
public boolean isValid(int row,int[] columnVal){
for(int i=0;i<row;i++){
if(columnVal[row]==columnVal[i] || Math.abs(columnVal[row]-columnVal[i])==row-i)
return false;
}
return true;
}
}