思路:递归求解,假设第n个数组成的向量字符串为f(n),那么第n+1个数生成的字符串向量为 '(' f(n) ')', '(' f(n-1) ')' f(1), '( )' f(n),其中f(1) = '( )'。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
string s1;
if(0 == n)return ret;
if(1 == n){
s1+='(';
s1+=')';
ret.push_back(s1);
}
else
for(int i=n-1;i>=0;i--){
vector<string> temp1 = generateParenthesis(i);
vector<string> temp2 = generateParenthesis(n-i-1);
int len1 = temp1.size(), len2 = temp2.size();
int count;
//cout<<"count="<<count<<endl;
if(0 == len1 || 0 == len2)
count = max(len1,len2);
else
count = len1 * len2;
int j=0, k = 0;
while(count--){
string s;
s += '(';
if(len1 > j){
s += temp1[j];
j++;
k = 0;
}
s += ')';
if(len2 > k){
while(len2 >k){
string s2 = s + temp2[k];
if(s2.size() == n*2) ret.push_back(s2);
k++;
}
}
else if(s.size() == n*2)
ret.push_back(s);
}
}
return ret;
}
};