N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
class Solution {
public:
int totalNQueens(int n) {
int ret = 0;
vector<int> result(n);
dfs(ret, result, 0);
return ret;
}
void dfs(int& ret, vector<int>& result, int cur)
{
if(result.size() == cur)
{
++ret;
}
else
{
for(int i = 0; i < result.size(); ++i)
{
if(isOK(result, cur, i))
{
result[cur] = i;
dfs(ret, result, cur+1);
}
}
}
}
bool isOK(vector<int>& result, int cur, int val)
{
for(int i = 0; i < cur; ++i)
{
if(val == result[i])
return false;
else if(abs(val - result[i]) == abs(i - cur))
return false;
}
return true;
}
};