Practice
void find(int open,int close,vector<string>&ans,string s)
{
if(open==0 && close==0)
{
ans.push_back(s);
return;
}
if(open!=0)
{
s+="(";
find(open-1,close,ans,s);
s.pop_back();
}
if(close>open)
{
s+=")";
find(open,close-1,ans,s);
}
}
vector<string> AllParenthesis(int n)
{
vector<string> ans;
string s;
int open,close;
open=close=n;
find(open,close,ans,s);
return ans;
}
void find(int open,int close,vector<string>&ans,string s)
{
if(open==0 && close==0)
{
ans.push_back(s);
return;
}
if(open!=0)
{
s+="(";
find(open-1,close,ans,s);
s.pop_back();
}
if(close>open)
{
s+=")";
find(open,close-1,ans,s);
}
}
vector<string> AllParenthesis(int n)
{
vector<string> ans;
string s;
int open,close;
open=close=n;
find(open,close,ans,s);
return ans;
}