描述
N 皇后问题是指在 n * n 的棋盘上要摆 n 个皇后,
要求:任何两个皇后不同行,不同列也不在同一条斜线上,求给一个整数 n ,返回 n 皇后的摆法数。
数据范围: 1≤n≤9
要求:空间复杂度 O(1) ,时间复杂度O(n!)
例如当输入4时,对应的返回值为2,
对应的两种四皇后摆位如下图所示:
示例1
输入:1
返回值:1
示例2
输入:8
返回值:92
代码
class Solution {
public:
/**
*
* @param n int整型 the n
* @return int整型
*/
int x[10];
int sum=0;
bool place(int k){
for(int i=1;i<k;i++){
if(x[i]==x[k]||abs(x[i]-x[k])==abs(i-k))
return 0;
}
return 1;
}
void DFS(int k,int n){
if(k>n)
sum++;
else{
for(int i=1;i<=n;i++){
x[k]=i;
if(place(k))
DFS(k+1,n);
}
}
}
int Nqueen(int n) {
// write code here
DFS(1,n);
return sum;
}
};