1. 题目描述
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
链接:https://leetcode-cn.com/problems/generate-parentheses
2. 解题思路
用回溯法求解所有的可能情况,但递归需要限制条件。
限制条件如下:
(1)左括号与右括号的数量,最多放n个;
(2)当右括号的数量比左括号多时,不必再往下递归。
3. 代码实现
class Solution:
def generateParenthesis(self, n: int):
self.res = []
self.search(n,n, '')
return len(self.res)
#left和right分表表示能再放入左右括号的数量
def search(self, left, right,temp):
if(left == 0 and right == 0):
self.res.append(temp)
return
if(left > 0):
self.search(left - 1,right, temp + '(')
if(left < right):
self.search(left, right - 1,temp + ')')