#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<vector>
#include<string>
void bracketsCreate(int l, int r, int n, vector<string>&v, string& s);
class Solution
{
public:
friend void bracketsCreate(int l,int r,int n,vector<string>&v,string& s)//全局函数类内实现
{
//判断括号是否达到n个并添加到vector容器里面
if (l == r && r == n)
{
v.push_back(s);
return;
}
if (l == r)//判断例如(),(())是这种情况不加入容器里
{
s += '(';
l++;
bracketsCreate(l, r, n, v, s);
s.pop_back();
l--;
}
else//不然开始写括号并且放入s;
{
if (l < n)//从左边开始写
{
s += '(';
l++;
bracketsCreate(l, r, n, v, s);//递归1,2,3
s.pop_back();//3返回后,变成((
l--;
s += ')';//第一种左边三个连续括号结束后(((,开始左边是两种((的递归
r++;
bracketsCreate(l, r, n, v, s);
s.pop_back();
r--;
}
else//当左边到n时,开始加右边
{
s += ')';
r++;
bracketsCreate(l, r, n, v, s);//递归4,5,6,此时s是((())),并且l==r==n,添加到容器并返回
s.pop_back();//返回6后s减掉一个')',变成((()),4,5返回后,变成(((
r--;
}
}
}
};
int main()
{
int l = 0;
int r = 0;
int n = 0;
vector<string>v;
string s;
cout << "请输入括号的对数:";
cin >> n;
bracketsCreate(l, r, n, v, s);
for (vector<string>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
cout << "一共有" << v.size() << "种方式" << endl;
system("pause");
return 0;
}
03-25
184