class Solution { public: void helper(int row, int &res, int n, vector<int>& solution) { if (row == n+1) { ++ res; } for (int i = 1; i <= n; ++ i) { if (canPlace(row, i, solution)) { solution[row-1] = i; helper(row+1, res, n, solution); solution[row-1] = -1; } } } bool canPlace(int row, int i, vector<int>& solution) { for (int j = 1; j < row; ++ j) { if (i == solution[j-1] || abs(i-solution[j-1]) == abs(row-j)) return false; } return true; } int totalNQueens(int n) { vector<int> solution(n, -1); int res = 0; if (n < 1) return res; helper(1, res, n, solution); return res; } };