==============================================================================
【id】#22
【title】 Generate Parentheses
【description】
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
【idea】
回溯算法
相当于深度优先搜索或者类似枚举法的搜索尝试。如果尝试失败就回退到上一节点。
生成括号中的条件有:
- 如果s长度为2n,说明是valid。
- 左边括号小于n时,就写一个做括号。
- 右边括号总是小于左边,因为是先生成左括号,最后才相等。
【code】
#backtracing
class Solution(object):
def generateParenthesis(self, n):
res = []
self.backtracing(res, '', 0, 0, n)
return res
def backtracing(self,res, s, left, right, n):
if len(s) == 2*n:
res.append(s)
return res
if left < n:
self.backtracing(res, s+'(', left+1, right, n)
if right < left:
self.backtracing(res, s+')', left, right+1, n)