所谓括号的有效组合就是整体’ (’ 和 ‘)’ 的数量相等,并且在任何位置都需要保证 ‘(’ 的数量大于等于 ‘)’ 的数量,这个就是我们算法的主要思想了。
#include<bits/stdc++.h>
using namespace std;
vector<string> res;
void dfs(string s,int l,int r){
if(l==0&&r==0){//l==r==0说明 s 已经满足了有效括号组合的两个条件了,保存下来
res.push_back(s);
return;
}
if(l< r){**//l<r说明当前位置之前'('的数量已经大于')'的数量了,可以加')'**
dfs(s+')',l,r-1);
}
if(l>0){***//l>0说明可以还可以加'('***
dfs(s+'(',l-1,r);
}
}
int main(){
int n;
cin>>n;
dfs("",n,n);
for(auto item:res)
cout<<item<<endl;
}