Fork me on GitHub

22 - 括号生成

题目描述

审题:
看到括号生成不自觉会想到括号匹配的检查,在生成过程中也要注意匹配规范。

回溯法

cr:leetcode-22-生成括号

定义:
回溯法是一个类似枚举的搜索尝试过程,主要是在搜索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试别的路径。

回溯与递归:
回溯指的是一种此路不通,绕道迂回的算法思想,递归是代码层次上的一种组织结构。

回到此题中来,下图可以说是非常直观了。这个选择过程就是一种树结构。最开始的时候肯定只能选 (,因此,分析是从 ( 开始的。

私以为以下代码可以说是超级棒了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution:
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""

res = []
self.helper( '', res, n, 0, 0)
return res

def helper(self, curr, res, n, left, right):
# 当 右括号 = n 时已经找到一个结果
if right == n:
res.append(curr)
if left < n:
self.helper(curr+'(',res, n, left+1, right)
if left > right:
self.helper(curr+')',res, n, left, right+1)