22.括号生成
题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
思路
可以想象二叉树的结构,每个结点都有 ‘(’ 和 ‘)’ 两种选择。
当左括号个数 > 右括号个数时:
- 若左括号个数<n:后面可以加左括号也可以加右括号
- 若左括号个数=n:后面只能加右括号
当左括号个数 = 右括号个数时:
- 左括号个数 = 右括号个数 < n:这时后面只能加左括号
- 左括号个数 = 右括号个数 = n:说明字符串已经完成,加入列表中
其他情况均不存在。
代码
python
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
l = []
def fun(str, num_left, num_right, n):
if num_right == n: # 这里即是num_left == num_right == n
l.append(str)
return
elif num_left == num_right:
fun(str + '(', num_left+1, num_right, n)
elif num_left > num_right:
fun(str + ')', num_left, num_right+1, n)
if num_left < n:
fun(str + '(', num_left+1, num_right, n)
fun('', 0, 0, n)
return l