求出N*N棋盘有多少种不同方法放置,跟N-Queue1 一样,只是不需要输出样本
public class Solution {
static int total = 0;
public int totalNQueens(int n) {
number = new int[n + 1];
for(int i = 0; i < number.length; ++i){
number[i] = i;
}
total = 0;
dfs(1);
return total;
}
static int[] number;
void dfs(int cur) {
if (cur == number.length) {
++total;
} else {
for (int i = cur; i < number.length; ++i) {
swap(number, cur, i);
if (isCan(cur)) {
dfs(cur + 1);
}
swap(number, cur, i);
}
}
}
void swap(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
boolean isCan(int cur) {
for (int i = 1; i < cur; ++i) {
if ((cur - i) == Math.abs(number[cur] - number[i])) {
return false;
}
}
return true;
}
}