Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
题解:参见http://www.cnblogs.com/sunshineatnoon/p/3853170.html
只要求求出解的个数,稍微改一下代码就可以了:用私有变量result记录解的数目,当搜索到一个解的时候,result+1即可。
代码如下:
1 public class Solution { 2 private int result = 0; 3 private boolean isValid(List<Integer> cols,int col){ 4 for(int i = 0;i < cols.size();i++){ 5 if(cols.get(i) == col) 6 return false; 7 if(cols.size() - i == Math.abs(cols.get(i) - col)) 8 return false; 9 } 10 return true; 11 } 12 private void QueenDfs(int n,int level,List<Integer> cols){ 13 if(level == n){ 14 result++; 15 } 16 17 for(int i = 0;i < n;i++){ 18 if(isValid(cols, i)){ 19 cols.add(i); 20 QueenDfs(n, level+1, cols); 21 cols.remove(cols.size()-1); 22 } 23 } 24 } 25 public int totalNQueens(int n) { 26 27 List<Integer> cols = new ArrayList<Integer>(); 28 QueenDfs(n, 0, cols ); 29 30 return result; 31 } 32 }