采用递归回溯的方法
class Solution {
static int count=0;//便于全局使用
static int[] array;//将二维化简为一维
//i代表行,array[i]代表列
public int totalNQueens(int n) {
array=new int[n];
check(0);
int a=count;
count=0;//最后归零
return a;
}
//放置第n个皇后
public static void check(int n){
if(n==array.length){
count++;
return;
}
for(int i=0;i<array.length;i++){
array[n]=i;
if(judge(n)){//如果不冲突,放入下一个皇后
check(n+1);
}
}
}
//判断第n个位置是否冲突
public static boolean judge(int n){
for(int i=0;i<n;i++){//判断是否在同一列,同一斜,i代表行不用限制
if(array[i]==array[n]||Math.abs(n-i)==Math.abs(array[n]-array[i])){
return false;
}
}
return true;
}
}