LeetCode 52. N皇后 II
【题目描述】
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
【示例1】
输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。
【示例2】
输入:n = 1
输出:1
【数据范围】
1 <= n <= 9
【说明】
皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
【思路】
首先发现数据范围比较小,如果可以用脑子 算出所有情况,可以直接打表。
脑子:你礼貌吗???
数据不大直接硬搜。
数据直接用一维数组pos表示就行,一维数组下标表示横坐标,pos[i]表示纵坐标,对应起来就是(i,j)
写完以后见鬼结果打表这就O(1)了(狗头
class Solution {
public:
int ans;
int num;
bool Judge(int j,vector<int>& pos){
int index=pos.size();//
for(int i=0;i<index;i++){
if(pos[i]==j || index-i==j-pos[i] || index-i==pos[i]-j)
return false;
}
return true;
}
void dfs(int i,vector<int>&pos){
if(i==num){
ans++;
return;
}
for(int j=0;j<num;j++){
if(Judge(j,pos)){
pos.emplace_back(j);
dfs(i+1,pos);
pos.pop_back();
}
}
}
int totalNQueens(int n) {
// num=n;
// vector<int>pos;
// dfs(0,pos);
vector<int>ans{1,0,0,2,10,4,40,92,352,};
return ans[n-1];
}
};