题目:
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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解题思路:
通过递归的思想,知左括号个数只要不为0就可以直接输出,而右括号个数必须大于左括号个数时才能输出,否则不符合规则
C++实现如下:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
string s="";
vector<string> res;
vector<string> generateParenthesis(int n) {
vector<string> v;
iterEveryPos(n,n);
return res;
}
void iterEveryPos(int l,int r){
if(l==0&&r==0){
res.push_back(s);
}else{
if(l>0){
s=s+"(";
iterEveryPos(l-1,r);
s=s.substr(0,s.size()-1);
}
if(r>l){
s=s+")";
iterEveryPos(l,r-1);
s=s.substr(0,s.size()-1);
}
}
}
};
int main(){
Solution sol;
vector<string> res=sol.generateParenthesis(3);
for(int i=0;i<res.size();i++){
cout<<res[i]<<endl;
}
return 0;
}