解题思路
这里以树的形式可以很巧妙的解这道题
我们以n = 2
为例:
我们以n
作为左右括号的剩余个数,用数的形式进行组合,排除掉非有效括号后,剩余的都是有效括号。
在这里我们有几点需要注意:
- 由于括号的规则,只要还存在左括号,右边随便加什么都行,反之则不行。
- 左右括号都为0的时候则结算
- 由第一点我们可以展开,产生右括号的时候右括号的数量必须大于左括号。
代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res, cur = [], ''
def dfs(cur, left, right):
if left == 0 and right == 0:
res.append(cur)
return
if right < left: return
if left > 0:
dfs(cur + '(', left - 1, right)
if right > 0:
dfs(cur + ')', left, right - 1)
dfs(cur, n, n)
return res