上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
class Solution {
int count=0;
int N=0;
public int totalNQueens(int n) {
N=n;
dfs(0,0,0,0);
return count;
}
public void dfs(int row,int col,int pie,int na){
if(row>=N){
count++;
} //终止条件
int bits=(~(col|pie|na))&((1<<N)-1);//得到空位
while(bits>0){
int p=bits&(-bits);//得到1 bit
dfs(row+1,col|p,(pie|p)<<1,(na|p)>>1);
bits&=bits-1; //去掉最后1-bit
}
}
}