LeetCode 22. 括号生成(Generate Parentheses)

LeetCode 22. 括号生成(Generate Parentheses)_第1张图片
LeetCode.jpg

22. 括号生成

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

例如,给出 n = 3,生成结果为:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

Python3实现

递归

# @author:leacoder 
# @des:   递归 括号生成  
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        self.list = []
        self.fnrecursive(0,0,n,"")
        return self.list
    
   
    #left:"("左括号被使用次数  right:")"右括号被使用次数 n:可以被使用括号对数  result:有效括号结果
    def fnrecursive(self,left,right,n,result):
        if left == n and right == n: # 左右括号使用次数均到达n次
            self.list.append(result)
            return
        # 1、要使括号有效 ,那么我们最先放的是 左括号 ,需要满足left < n
        if left < n:
            self.fnrecursive(left+1,right,n,result + "(")
        # 2、要使括号有效 ,右括号使用次数必然不大于左括号,并且 right < n
        if left > right and right < n: 
            self.fnrecursive(left,right+1,n,result + ")")

GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
个人Blog:
https://lichangke.github.io/
欢迎大家来一起交流学习[图片上传中...(LeetCode.jpg-3f55e1-1554216352080-0)]

你可能感兴趣的:(LeetCode 22. 括号生成(Generate Parentheses))