题目链接:N-Queens II

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

这道题的要求是返回N皇后问题总共有多少不同情况。

和N-Queens问题一样,同样的思路,至少这个是统计数量而已,代码也大部分都相同。

时间复杂度:O(???)

空间复杂度:O(n)

 1 class Solution
 2 {
 3 public:
 4     int totalNQueens(int n)
 5     {
 6         vector<int> vi(n);
 7         int res = 0;
 8         solveNQueens(res, vi, n, 0);
 9         return res;
10     }
11     
12 private:
13     void solveNQueens(int &res, vector<int> &vi, int n, int c)
14     {
15         if(c == n)
16         {
17             ++ res;
18             return;
19         }
20 
21         for(vi[c] = 0; vi[c] < n; ++ vi[c])
22             if(safe(vi, n, c))
23                 solveNQueens(res, vi, n, c + 1);
24     }
25 
26     bool safe(vector<int> &vi, int n, int c)
27     {
28         for(int i = 0; i < c; ++ i)
29             if(vi[i] == vi[c] || abs(vi[c] - vi[i]) == abs(c - i))
30                 return false;
31         return true;
32     }
33 };