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 count = 0;
vector<string> queens(n, string(n, '.'));
findQueens(queens, n, count, 0);
return count;
}
private:
void findQueens(vector<string>& queens, int n, int& count, int row){
if(row == n)
{
count++;
return;
}
for(int col = 0; col<n; col++)
{
if(isValid(queens, row, col, n))
{
queens[row][col] = 'Q';
findQueens(queens, n, count, row+1);
queens[row][col] = '.';
}
}
}
bool isValid(vector<string>& queens, int row, int col, int n){
for(int i = 0; i < row; i++)
{
if(queens[i][col] == 'Q')
return false;
}
for(int i = row-1, j = col-1; i>=0 && j>=0; --i, --j)
{
if(queens[i][j] == 'Q')
return false;
}
for(int i = row-1, j = col+1; i>=0 && j<n; --i, ++j)
{
if(queens[i][j] == 'Q')
return false;
}
return true;
}
};