09Leetcode---Generate parentheses

117 阅读2分钟

一. 题目
n表示生成括号的对数,请写一个函数,输入n,产生所有可能且有效的括号组合
例如 n=3 生成结果:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”

]
二. 思路:
目标:求出所有由n对圆括号组合的有效形式,考虑用递归的方法生成所有可能的组合形式,关键:如何保证使用递归算法生成的组合形式是合法的
分析:1. n对括号(包含n个left括号 n个right括号)2. 两个限制条件:(1)左右括号数相等 (2)在任意位置之前的右括号不大于左括号数;
步骤:1. 取string str 保存生成结果, int left 为剩余要插入的左括号数, int right 为剩余要插入的右括号数
2. left ==0 且 right ==0 说明已生成一个由n对圆括号组合的有效形式,将其存入结果中即可
3. 若left!=0那么插入左括号就是合法的;若right!=0且right>left(即当前剩余需要插入的右括号树大于剩余左括号树,那么插入右括号也是合法的!)。



  • void generate(vector<string> &result, string str, int left, int right)



  • {



  • if (left == 0 && right == 0)



  • {



  • result.push_back(str);



  • }



  • else



  • {



  • if (left != 0)



  • generate(result, str + "(", left - 1, right);



  • if (right > left)



  • generate(result, str + ")", left, right - 1);



  • }



  • }



C++版



  • class Solution {



  • public:



  • vector<string> generateParenthesis(int n) {



  • vector<string> result;



  • generate(n, n, "", result);



  • return result;



  • }







  • void generate(int leftNums, int rightNums, string s, vector<string>& result){



  • if (leftNums == 0 && rightNums == 0) result.push_back(s);



  • if (leftNums > 0){



  • generate(leftNums - 1, rightNums, s + "(", result);



  • }



  • if (leftNums < rightNums && rightNums > 0){



  • generate(leftNums, rightNums - 1, s + ")", result);



  • }



  • }



  • };



python版



  • class Solution:



  • def generateParenthesis(self, n):



  • """



  • :type n: int



  • :rtype: List[str]



  • """



  • self.res= []



  • self.generateParenthesisIter('',n,n)



  • return self.res



  • def generateParenthesisIter(self,mstr,r,l):



  • if r==0 and l==0:



  • self.res.append(mstr)



  • #如果左括号的个数还有剩余,则+’(‘然后递归



  • if l>0:



  • self.generateParenthesisIter(mstr+'(',r,l-1)



  • #如果右括号有剩余且小于左括号的个数则+‘)’



  • if r>0 and r>l:




---------------------作者:千里江河 来源:CSDN 原文:blog.csdn.net/qinghange/ … 版权声明:本文为博主原创文章,转载请附上博文链接!

更多免费技术资料可关注:annalin1203