[LEETCODE]52. N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
这道题比N-Queens 要简单一点。
它要求输出的所有可能的不同解。这里代码都是差不多的。
class Solution {
public:
bool check(vector<int>& cols, int cur) {
for (int i = 0; i < cur; i++) {
if (cols[i] == cols[cur] || (abs(cols[i] - cols[cur]) == cur - i)) return false;
}
return true;
}
void Nqueens(int n, vector<int>& cols, int &res, int cur) {
if (cur == n) {
res++;
return;
}
for (int i = 0; i < n; i++) {
cols[cur] = i;
if (check(cols, cur)) {
Nqueens(n, cols, res, cur + 1);
}
}
}
int totalNQueens(int n) {
vector<int> cols(n, -1);
int res = 0;
Nqueens(n, cols, res, 0);
return res;
}
};
主要就是用了一个递归回溯,要注意递归的话一定要设置一个返回条件,然后用check 来判断是否符合要求。