zoukankan      html  css  js  c++  java
  • LeetCode Medium:22. Generate Parentheses

    一、题目

    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、必须有一个明确的结束条件;2、每次递归都是为了让问题规模变小;3、递归层次过多会导致栈溢出,且效率不高
    三、代码
    #coding:utf-8
    class Solution(object):
        def func(self, array, string, left, right):
            """array:最终生成的list
               string:本轮已经完成的str
               left:左括号剩余个数
               right:右括号剩余个数
            """
            if left == 0 and right == 0:  # 递归终止条件,左边括号与右边括号剩余个数均为0
                array += [string]
            if left > 0:  # 左边括号剩余大于0,则可以继续往下递归
                self.func(array, string + "(", left - 1, right)
            if right > 0 and left < right:  # 右边括号剩余大于0且左边剩余小于右边剩余,则可继续递归
                self.func(array, string + ")", left, right - 1)
    
        def generateParenthesis(self, n):
            """
            :type n: int
            :rtype: List[str]
            """
            rtn = []
            self.func(rtn, "", n, n)
            print(rtn)
            return rtn
    
    """
    递归例子
    """
    def division(n):
        print(n)
        if int(n/2)==0:
            return n#递归特性一:必须有一个明确的结束条件
        return division(int(n/2))#递归特性二:每次递归都是为了让问题规模变小
    
    division(10)#递归特性三:递归层次过多会导致栈溢出,且效率不高
    
    if __name__ == '__main__':
        ss = Solution()
        ss.generateParenthesis(2)
    

      

    既然无论如何时间都会过去,为什么不选择做些有意义的事情呢
  • 相关阅读:
    登录注册页面切换
    LINUX系统日常使用命令
    find命令详解
    ssh命令详解
    tar命令详解
    route命令详解
    uname命令详解
    ps命令详解
    df命令详解
    virsh命令详解
  • 原文地址:https://www.cnblogs.com/xiaodongsuibi/p/8903390.html
Copyright © 2011-2022 走看看