Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
题目解析:
1、主要是根据与第一个括号的结合程度:
例如n为3的时候
(1) “()+n为2的时候”
(2)“(n为1的时候)+n为1的时候”
(3)“(n为2的时候)”
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n <= 0)
return res;
if(n == 1)
{
string str;
str.push_back('(');
str.push_back(')');
res.push_back(str);
return res;
}
for(int i=0;i<n;i++)
{
vector<string> vs1 = generateParenthesis(i);
vector<string> temp;
if(vs1.size()==0)
{
string str(2,' ');
str.at(0) = '(';
str.at(1) = ')';
temp.push_back(str);
}
for(size_t j=0;j<vs1.size();j++)
{
string str((1+i)*2,' ');
str.at(0) = '(';
str.at((1+i)*2-1) = ')';
string ss = vs1[j];
for(size_t k=0;k<ss.size();k++)
{
str.at(k+1) = ss[k];
}
temp.push_back(str);
}
vector<string> vs2 = generateParenthesis(n-i-1);
for(size_t p = 0;p<temp.size();p++)
{
string ss = temp[p];
if(vs2.size() == 0)
{
res.push_back(ss);
}
for(size_t q = 0;q<vs2.size();q++)
{
string sss = ss;
string ss2 = vs2[q];
sss.append(ss2);
res.push_back(sss);
}
}
}
return res;
}
void printStringList(vector<string> &res)
{
vector<string>::iterator it = res.begin();
for(;it!=res.end();it++)
{
cout << *it << endl;
}
}
int main(void)
{
vector<string> res = generateParenthesis(3);
printStringList(res);
system("pause");
return 0;
}