求给你多少个左括号(相等的意思),多少种合法的括号匹配。将左括号看做是+1,右括号则为-1,那么合法的要求则是不能使得和小于0,如果和为0,则必须后面一个为左括号。结果的合法的操作为和为0
class Solution {
public:
char s[10000];
vector<string> generateParenthesis(int n) {
string ss;
vector<string>ans;
get_ans(n<<1,0,0,ans);
return ans;
}
void get_ans(int mm,int ans,int step,vector<string>& an){
if(!mm&&ans==0){an.push_back(s);return ;}
else if(!mm)return ;
if(ans>0){
s[step]='(';get_ans(mm-1,ans+1,step+1,an);
s[step]=')';get_ans(mm-1,ans-1,step+1,an);
}
else if(ans==0){
s[step]='(';get_ans(mm-1,ans+1,step+1,an);
}
}
};