N-Queens II
Mar 20 '12
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions. A good optimization example: when the request result is simplified, we may use reduced data struct to save time and space.
won't pass the big dataset until use one dimension array to replace the matrix in queen I.
class Solution {
public:
int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> board(n, -1);
int sum = 0;
queenRec(board, 0, sum);
return sum;
}
private:
void queenRec(vector<int>& board, int level, int & sum) {
int n = board.size();
if(level==n) {
++sum;
return;
}
for(int i=0; i<n; i++) {
if(check(board, level, i)) {
board[level] = i;
queenRec(board, level+1, sum);
board[level] = -1;
}
}
}
bool check(const vector<int>& cur, int row, int col) {
int n= cur.size();
for(int i=0; i<row; i++) {
if(cur[i]==col || row-i == abs(col-cur[i]) ) return false;
}
return true;
}
};