N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Solution
- 在上一题的基础上,这道题显得过于简单。
public class Solution {
public int totalNQueens(int n) {
int[] res = new int[1];
help(n, 0, new int[n], res);
return res[0];
}
public void help(int n, int row, int[] used, int[] res){
if(row>=n){
res[0]++;
return;
}
for(int j=0,i=0;j<n;j++){
for(i=0;i<row;i++) if(j==used[i]||Math.abs(i-row)==Math.abs(j-used[i])) break;
if(i!=row) continue;
used[row] = j;
help(n,row+1,used,res);
}
}
}
- 另外,其实想传递单个的数值,也可以不用数组。而是作为返回值带回。
public class Solution {
public int totalNQueens(int n) {
return help(n, 0, new int[n], 0);
}
public int help(int n, int row, int[] used, int res){
if(row>=n) return ++res;
for(int j=0,i=0;j<n;j++){
for(i=0;i<row;i++) if(j==used[i]||Math.abs(i-row)==Math.abs(j-used[i])) break;
if(i!=row) continue;
used[row] = j;
res = help(n,row+1,used,res);
}
return res;
}
}