这题让返回总共解法数,与上题一样,直接改为统计个数就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class Solution { public: int totalNQueens(int n) { vector<bool> col(n,false); vector<bool> ll(2*n-1,false); vector<bool> rr(2*n-1,false); _col=&col; _ll=≪ _rr=&rr; int row=0; total=0; totaln(n,row); return total; } void totaln(int n,int row) { int j; if(row==n) { total++; return ; } int i=row; for(j=0;j!=n;j++) { if((*_col)[j]==true||(*_ll)[i+j]==true||(*_rr)[i-j+n-1]==true) continue; (*_col)[j]=true; (*_ll)[i+j]=true; (*_rr)[i-j+n-1]=true; totaln(n,row+1); (*_col)[j]=false; (*_ll)[i+j]=false; (*_rr)[i-j+n-1]=false; } return; } private: vector<bool>* _col=nullptr; vector<bool>* _ll=nullptr; vector<bool>* _rr=nullptr; int total; };
|