题目内容
https://leetcode-cn.com/problems/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:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
题目思路
这道题目的结构可以用DFS来解决。我们构建一棵递归的深度优先搜索树,当层数达到n时获得叶子结点作为结果。对于这颗二叉树来说,它的左侧和右侧分支的意义在于增加左括号或者有括号,当不满足条件的时候,添加返回。同时为了保证结果是有意义的,还要求当左括号数大于右括号数时才走右括号分支。对于DFS来说,它的优点在于它可以运用递归的方式来隐式的解决问题。当我们面对可以使用树的分支结构来解决一个问题的时候,就可以考虑使用DFS。在使用DFS的时候,要注意设置终止条件,以及在回退到上一部分后,另外一枝该怎么走。
程序代码
class Solution(object):
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
res=[]
self.generate(0,0,'',res,n)
return res
def generate(self,left,right,path,res,n):
if left==n and right==n:
res.append(path)
return
if left<n:
self.generate(left+1,right,path+'(',res,n)
if right<left:#这里一定不能用elif,否则只能走一支
self.generate(left,right+1,path+')',res,n)