1. 问题
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路
添加括号有两种方式,添加左括号,或者添加右括号,其中,满足要求的记录。思路就是遍历所有的情况,一种实现方式就是回溯。每次添加括号都是遍历的层数加1,在这基础上,再次进行遍历,直到遍历结束。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
def helper(res,left,right,all_res):
if (right>left) or (left>n) or (right>n):
return all_res
if (left == n) and (right == n):
all_res.append(res)
return all_res
if left < n:
res1 = res + '('
all_res = helper(res1,left+1,right,all_res)
if right < n:
res2 = res + ')'
all_res = helper(res2,left,right+1,all_res)
return all_res
all_res = helper('',0,0,[])
return all_res