您的位置:首页 > 其它

Generate Parentheses

2015-06-10 16:09 239 查看
题目: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;}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: