leetcode之Generate Parentheses

来源:互联网 发布:可变数据喷码机价格 编辑:程序博客网 时间:2024/05/01 18:14

原题如下:

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到2n个序列位置进行括号插入时,都要符合剩余的右括号数量大于剩余的左括号的数量,按照此原则,我们在打印时可以记录并更新剩余的左右括号数量:当剩余的左右括号都为0时,一个序列打印完毕;当剩余的左括号大于0时,打印左括号,然后递归调用;当剩余的左括号小于右括号时,打印右括号,然后递归调用。可以看出此题仍采用的分治策略,而且在每个节点都有两次递归调用(对应打印左括号和右括号两种情况),具体代码如下:

class Solution {public:    vector<string> generateParenthesis(int n) {vector<string>v;if(n == 0)return v;string s;generate(n,n,s,v);return v;    }void generate(int leftleft,int rightleft,string s,vector<string>&v){if(leftleft == 0 && rightleft == 0){v.push_back(s);return;}if(leftleft > 0){//string ss = s;s.append(1,'(');generate(leftleft-1,rightleft,s,v);s = s.erase(s.size()-1,1);}if(leftleft < rightleft){//string ss = s;s.append(1,')');generate(leftleft,rightleft-1,s,v);s = s.erase(s.size()-1,1);}return;}};
注:此处对字符串string类的操作不够熟练,记得在每次递归调用后返回时应使字符串处于递归调用前的状态,目前对此题的理解还需进一步深入。。。


0 0
原创粉丝点击