美文网首页算法学习打卡计划
leetcode第二十二题 ——括号生成

leetcode第二十二题 ——括号生成

作者: 不分享的知识毫无意义 | 来源:发表于2019-11-29 17:43 被阅读0次

    1.题目

    原题:

    给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

    例子:

    给定n=3,
    输出:
    [
      "((()))",
      "(()())",
      "(())()",
      "()(())",
      "()()()"
    ]
    

    2.解析

    2.1 基本思路

    这道题典型的可以递归求解,既然说到递归那么我们必须要考虑的是程序的出口问题,这个问题来看,有左括号和右括号个数分别为n,我们可以设置初始左右括号的个数值,left = n,right = n,接触条件为左右括号的个数都为0,即已经无法再添加任何一个括号了。递归还有两个技巧:

    • 存在左括号,可以放左括号
    • 左括号数小于右括号数,可以放右括号

    3.python代码

    class Solution:
        def generateParenthesis(self, n):
            result = []
            def diguigenerate(left=0, right=0, res=''):
                if len(res) == 2*n:
                   result.append(res)
                   return result
                if left < n:
                    diguigenerate(left+1, right, res + '(')#放一个左括号
                if left > right:
                    diguigenerate(left, right+1, res + ')')
            diguigenerate()
            return result
    

    相关文章

      网友评论

        本文标题:leetcode第二十二题 ——括号生成

        本文链接:https://www.haomeiwen.com/subject/dqhywctx.html