#include<iostream>
#include<vector>
#include<string>
using namespace std;
void generate(int n,string s,int l,int r,vector<string>&result)
{
if(l==n)
{
s.append(n-r,')');
result.push_back(s);
return ;
}
generate(n,s+"(",l+1,r,result);
if(l>r)
generate(n,s+")",l,r+1,result);
}
vector<string>generatePa(int n)
{
vector<string>result;
if(n>0)
generate(n,"",0,0,result);
return result;
}
vector<string>generateParenthess(int n)
{
if(n==0)
return vector<string>(1,"");
if(n==1)
return vector<string>(1,"()");
vector<string>result;
for(int i=0;i<n;++i)
for(auto& inner:generateParenthess(i))
for(auto& outter:generateParenthess(n-i-1))
result.push_back("("+inner+")"+outter);
return result;
}
int main()
{
int n=3;
vector<string>result=generateParenthess(n);
for(auto &s:result)
cout<<s<<endl;
return 0;
}
#include<vector>
#include<string>
using namespace std;
void generate(int n,string s,int l,int r,vector<string>&result)
{
if(l==n)
{
s.append(n-r,')');
result.push_back(s);
return ;
}
generate(n,s+"(",l+1,r,result);
if(l>r)
generate(n,s+")",l,r+1,result);
}
vector<string>generatePa(int n)
{
vector<string>result;
if(n>0)
generate(n,"",0,0,result);
return result;
}
vector<string>generateParenthess(int n)
{
if(n==0)
return vector<string>(1,"");
if(n==1)
return vector<string>(1,"()");
vector<string>result;
for(int i=0;i<n;++i)
for(auto& inner:generateParenthess(i))
for(auto& outter:generateParenthess(n-i-1))
result.push_back("("+inner+")"+outter);
return result;
}
int main()
{
int n=3;
vector<string>result=generateParenthess(n);
for(auto &s:result)
cout<<s<<endl;
return 0;
}