leetcode第二十二题 ——括号生成
2019-11-29 本文已影响0人
不分享的知识毫无意义
1.题目
原题:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例子:
给定n=3,
输出:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
2.解析
2.1 基本思路
这道题典型的可以递归求解,既然说到递归那么我们必须要考虑的是程序的出口问题,这个问题来看,有左括号和右括号个数分别为n,我们可以设置初始左右括号的个数值,left = n,right = n,接触条件为左右括号的个数都为0,即已经无法再添加任何一个括号了。递归还有两个技巧:
- 存在左括号,可以放左括号
- 左括号数小于右括号数,可以放右括号
3.python代码
class Solution:
def generateParenthesis(self, n):
result = []
def diguigenerate(left=0, right=0, res=''):
if len(res) == 2*n:
result.append(res)
return result
if left < n:
diguigenerate(left+1, right, res + '(')#放一个左括号
if left > right:
diguigenerate(left, right+1, res + ')')
diguigenerate()
return result