题目描述
给你一个整数n,代表拥有n对括号。现在请你写出一个程序,输出其能够生成所有可能的并且有效的括号组合数量。
输入
测试数据由多组测试样例组成。每组测试数据第一行输入一个正整数n ( 1 <= n <= 12)输出输出能够生成的所有可能并且有效的括号组合数量
样例输入 Copy
3
样例输出 Copy
5
输出结果为:
“((()))”,“(()())”,”(())()“,”()(())“,”()()()“。
注意:右括号的数量一定不能超过左括号
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int n;
int ans=0;
void dfs(string str,int left,int right){
if(str.length() ==n*2){//长度
ans++;
return;
}
if(left<n){//左括号没有放全
str.push_back('(');//放入一个左括号
dfs(str,left+1,right);//搜索 多了一个左括号+1
str.pop_back() ;//左括号回溯掉
}
if(right<left){//右括号小于左括号,右括号没有放全
str.push_back(')');
dfs(str,left,right+1);
str.pop_back() ;
}
}
int main(){
while(cin>>n){
ans=0;
dfs("",0,0);
cout<<ans<<endl;
}
return 0;
}