与leetcode 51 基本相同,区别在于通过一个count将每次递归结果计数,最后返回count。
class Solution { public: int count = 0; bool available(vector<int> &vis,int row,int col) { for (int i = 0; i<row; i++) { if (vis[i] == col)return false; if ((i - vis[i]) == (row - col))return false; if ((i + vis[i]) == (row + col))return false; } return true; } void DFS(vector<int> &vis,int level,int n) { if(level == n) { count++; } else { for(int i=0;i<n;i++) { if(available(vis,level,i)) { vis[level] = i; DFS(vis,level+1,n); vis[level] = -1; } } } } int totalNQueens(int n) { vector<int> vis(n,-1); DFS(vis,0,n); return count; } };