Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
public class Solution {
public int totalNQueens(int n) {
int [] ableArray = new int[n];
int [] result = new int[1];
dfs(0,ableArray,result);
return result[0];
}
void dfs(int level, int[] ableArray,int[] result) {
int nLength = ableArray.length;
if (level == nLength) {
result[0]++;
return;
}
for (int i = 0;i < nLength; i++) {
if (isValid(level, i,ableArray)) {
ableArray[level] = i;
dfs(level + 1, ableArray,result);
}
}
}
boolean isValid(int level, int xPos, int[] ableArray) {
int yPos = level;
for (int i = 0; i < level; i++) {
int xOldPos = ableArray[i];
int yOldPos = i;
if (xPos - yPos == xOldPos - yOldPos
||xPos + yPos == xOldPos + yOldPos
||xPos == xOldPos) {
return false;
}
}
return true;
}
}