LeetCode-22-括号生成(回溯法)
/*括号生成*/
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void generate(string cur,vector<string> &res,int left,int right,int n){//回溯法--递归法
if (right == n){
res.push_back(cur);
//cout << cur << endl;
}
if (left <n){
generate(cur+'(',res,left + 1, right, n);
}
if (right <n&&left>right){
generate(cur+')', res, left, right + 1, n);
}
}
int main(){
int n;
cin >> n;
int left = 0, right = 0;//左右括号的对数
vector<string> res;//构建一个存储string类型的数组
generate("",res,left, right, n);
//遍历数组并输出
vector<string>::iterator it;
for (it = res.begin(); it != res.end(); it++)
{
cout << *it << endl;
}
return 0;
}