LeetCode Medium:22. Generate Parentheses
Posted nunca
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于LeetCode Medium:22. Generate Parentheses的主要内容,如果未能解决你的问题,请参考以下文章