题目:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
思路:
递归求解,对于输入数据n,有n个左括号,n个右括号,共2n个括号,设left为剩余的左括号个数,right为剩余的右括号个数。根据括号匹配的规则可知
- 当left=0且right=0时,完成一个合法的排列,输出。
- 当left>0时,打印'('。
- 当right>0且right>left,打印‘)’。
代码:
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> svec;
if(n==0) return svec;
string str="";
generate(svec,n,n,str);
return svec;
}
void generate(vector<string >& ret,int left,int right,string str)
{
if(left==0&&right==0)
ret.push_back(str);
if(left>0)//可直接打印左括号,不影响规则
{
generate(ret,left-1,right,str+'(');
}
if(right>0&&left<right)//
{
generate(ret,left,right-1,str+')');
}
}
};
int main()
{
int num;;
cin>>num;
Solution s;
vector<string> ret;
ret=s.generateParenthesis(num);
for(auto iter=ret.begin();iter!=ret.end();++iter)
{
cout<<"\""<<*iter<<"\""<<" ";
}
cout<<endl;
system("pause");
return 0;
}