class Solution { public: int res = 0, N; int column = 0, diagonal1 = 0, diagonal2 = 0; //使用集合时替换成 unordered_set<int> column, diagonal1, diagonal2; int Nqueen(int n) { N = n; helper(0); return res; } void helper(int n) { if(n == N) { res++; return; } for(int i = 0; i < N; i++) { int temp1 = i + n, temp2 = N + n - i; if(!bit_value(column, i) && !bit_value(diagonal1, temp1) && !bit_value(diagonal2, temp2)) { change_bit_value(column, i, 1); change_bit_value(diagonal1, temp1, 1); change_bit_value(diagonal2, temp2, 1); helper(n + 1); change_bit_value(column, i, 0); change_bit_value(diagonal1, temp1, 0); change_bit_value(diagonal2, temp2, 0); } /*使用集合时替换成 if(!column.count(i) && !diagonal1.count(temp1) && !diagonal2.count(temp2)) { column.insert(i); diagonal1.insert(temp1); diagonal2.insert(temp2); helper(n + 1); column.erase(i); diagonal1.erase(temp1); diagonal2.erase(temp2); } */ } } int bit_value(int &num, int n) { return (num >> n) & 1; } void change_bit_value(int &num, int n, int value) { if(value == 1) num |= (1 << n); else num &= ~(1 << n); } };