class Solution {
public:
/**
*
* @param n int整型 the n
* @return int整型
*/
int Process(int limit,int lineLimit,int leftLimit,int rightLimit){
if(limit == lineLimit) //如果二进制n位全部到达1,说明成功填满,返回次数1
return 1;
int pos = limit & (~(lineLimit | leftLimit | rightLimit)); //这里的pos表示总限制位,二进制为1的表示能加皇后
int rightOne = 0;
int res = 0;
while(pos != 0){
rightOne = pos & (~pos + 1); //依次取二进制位最右边为1的数
pos -= rightOne;
res += Process(limit, lineLimit | rightOne, (leftLimit | rightOne) << 1, (rightLimit | rightOne) >> 1);
}
return res;
}
int Nqueen(int n) {
// write code here.
int limit = n == 32 ? -1 : ((1 << n) - 1); //limit代表后n位为1的数
return Process(limit, 0, 0, 0);//这里的三个0表示行限制,左对角限制和右对角限制,初始全为0
}
};