n对括号,那么有2*n个字符,我们可以把每种情况写出来,看【有效括号】的规律是什么
左括号和右括号的个数都等于n。左括号必须先放了后,才能放右括号
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
helper("",res,n,n);
return res;
}
//left代表还可以放多少个左括号,right代表还可以放多少个右括号
void helper(string tmp,vector<string>& res,int left ,int right)
{
if(left == 0 && right == 0)
{
res.push_back(tmp);
return;
}
if(left>0)//如果还可以放左括号,就放左括号(
helper(tmp+'(',res,left-1,right);
if(left<right)//当左括号放的更多时,就可以放右括号了
helper(tmp+')',res,left,right-1);
}
};