题目描述
审题:
看到括号生成不自觉会想到括号匹配的检查,在生成过程中也要注意匹配规范。
回溯法
定义:
回溯法是一个类似枚举的搜索尝试过程,主要是在搜索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试别的路径。回溯与递归:
回溯指的是一种此路不通,绕道迂回的算法思想,递归是代码层次上的一种组织结构。
回到此题中来,下图可以说是非常直观了。这个选择过程就是一种树结构。最开始的时候肯定只能选 (,因此,分析是从 ( 开始的。![]()
私以为以下代码可以说是超级棒了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class 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)
