# #34 N-Queens II

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

Example

For n=4, there are 2 distinct solutions.

Mycode（AC = 171ms）：

class Solution {
public:
/**
* Calculate the total number of distinct N-Queen solutions.
* @param n: The number of queens.
* @return: The total number of distinct solutions.
*/
int totalNQueens(int n) {
int count = 0;
if (n == 0) return count;

vector<string> sofar;
unordered_set<int> col, diag;
solveNQueens(count, sofar, n, col, diag);
return count;
}

void solveNQueens(int& count,
vector<string>& sofar,
int n,
unordered_set<int>& col,
unordered_set<int>& diag)
{
if (sofar.size() == n) {
count++;
return;
}

string tmp = nDots(n);
for (int i = 0; i < n; i++) {
// if there is no Q in same row, col, and diag,
// then tmp could be a potential ans
if (col.find(i) == col.end() &&
!findDiag(diag, sofar.size(), i, n))
{
col.insert(i);
diag.insert(sofar.size() * n + i);
tmp[i] = 'Q';
sofar.push_back(tmp);

solveNQueens(count, sofar, n, col, diag);

sofar.pop_back();
tmp[i] = '.';
diag.erase(sofar.size() * n + i);
col.erase(i);
}
}
}

// write n '.' in a line
string nDots(int n) {
string str = "";
for (int i = 0; i < n; i++) {
str += ".";
}
return str;
}

// check whether there is Q in diag
bool findDiag(unordered_set<int>& diag, int i, int j, int n) {
for (auto it = diag.begin(); it != diag.end(); it++) {
int row = *it / n;
int col = *it % n;

if (abs(row - i) == abs(col - j)) return true;
}

return false;
}
};


• 本文已收录于以下专栏：

## LeetCode 52. N-Queens II（N皇后）

• jmspan
• 2016年05月21日 06:27
• 292

## [LeetCode][Java] N-Queens II

• Evan123mg
• 2015年07月15日 10:51
• 757

## LeetCode 51. N-Queens和52. N-Queens II的位运算解法

LeetCode 51. N-Queens和52. N-Queens II的位运算解法
• u011433274
• 2016年09月09日 17:00
• 435

## leetCode 52.N-Queens II (n皇后问题II) 解题思路和方法

N-Queens II Follow up for N-Queens problem. Now, instead outputting board configurations, ...
• xygy8860
• 2015年07月13日 14:08
• 1128

## N-Queens II -- LeetCode

• linhuanmars
• 2014年03月07日 00:34
• 9973

## [leetcode] 52. N-Queens II 解题报告

• qq508618087
• 2015年12月21日 14:38
• 526

## LeetCode52——N-Queens II

LeetCode52——N-Queens II 跟LeetCode51一样，只不过这题是求解解的个数。 这里我套用了上一题的代码，只不过当row==n（递归返回条件）时，不是将一种可行解加入结果集...
• zhangxiao93
• 2015年10月24日 21:03
• 637

## [leetcode-52]N-QueensII(java)

• zdavb
• 2015年08月03日 09:32
• 509

## [LeetCode60]N-Queens II

Follow up for N-Queens problem. Now, instead outputting board configurations, return the total nu...
• sbitswc
• 2014年06月18日 05:34
• 2472

## Leetcode: N-Queens && N-Queens II

N-Queens: Problem: The n-queens puzzle is the problem of placing n queens on an n×n chessboard s...
• LuckySeven7777
• 2015年02月25日 09:39
• 196

举报原因： 您举报文章：#34 N-Queens II 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)