与leetcode 51 基本相同,区别在于通过一个count将每次递归结果计数,最后返回count。
class Solution {
public:
int count = 0;
bool available(vector<int> &vis,int row,int col)
{
for (int i = 0; i<row; i++)
{
if (vis[i] == col)return false;
if ((i - vis[i]) == (row - col))return false;
if ((i + vis[i]) == (row + col))return false;
}
return true;
}
void DFS(vector<int> &vis,int level,int n)
{
if(level == n)
{
count++;
}
else
{
for(int i=0;i<n;i++)
{
if(available(vis,level,i))
{
vis[level] = i;
DFS(vis,level+1,n);
vis[level] = -1;
}
}
}
}
int totalNQueens(int n) {
vector<int> vis(n,-1);
DFS(vis,0,n);
return count;
}
};