思路
n表示有n对括号,可以得出结束条件为2n
要保证括号合法性,所以要先放左括号,然后放右括号
代码
#include<bits/stdc++.h>
using namespace std;
int ans=0;
int n;
void dfs(int l,int r,string str){
if(str.length()==2*n){
ans++;
return;
}
if(l<n){ //先放左括号
str.push_back('(');//如果左括号没放完就在字符串中加入一个左括号
dfs(l+1,r,str);//继续搜索,左括号加一
str.pop_back();//回溯
}
if(r<l){ //因为必定左括号打头,所以右括号必定小于左括号
str.push_back('(');
dfs(l,r+1,str);//右括号加一
str.pop_back();
}
}
int main()
{
while(cin>>n){
ans=0;
dfs(0,0,"");
cout<<ans<<endl;
}
return 0;
}