思路:
递归解决,如果左括号个数小于右括号或者左括号数小于总括号对数,则生成一个左括号,如果左括号数大于右括号,生成一个右括号。
class Solution { public: vector<string> ans; int num; void brackets(string res, int left, int right, int sum) { if(sum == 2 * num) { ans.push_back(res); } else{ if(left < right || left < num)brackets(res + '(', left + 1, right, sum + 1); if(left > right)brackets(res + ')', left, right + 1, sum + 1); } } vector<string> generateParenthesis(int n) { if(n == 0) return ans; num = n; brackets("", 0, 0, 0); return ans; } };