LeetCode
52. N皇后 II
返回n皇后不同的解决方案的数量。不需要返回真正的解,更简单一些。
int solutionCount = 0;
int n;
int[] columns;
int[] diagonals1;
int[] diagonals2;
public int totalNQueens(int n) {
this.n = n;
columns = new int[n];
//i+j
diagonals1 = new int[2*n-1];
//j-i
diagonals2 = new int[2*n-1];
backtrack(0);
return solutionCount;
}
private void backtrack(int r) {
if (r == n) {
solutionCount++;
return ;
}
for (int c = 0; c < n; c++) {
if (!legal(r, c)) continue;
place(r, c, 1);
backtrack(r + 1);
place(r, c, 0);
}
}
private boolean legal(int r, int c) {
return columns[c] == 0 && diagonals1[r + c] == 0 && diagonals2[c - r + n - 1] == 0;
}
private void place(int r, int c, int target) {
columns[c] = target;
diagonals1[r + c] = target;
diagonals2[c - r + n - 1] = target;
}