数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归遍历即可 每个位置都有两种情况左括号|有括号遍历所有情况
非法条件: 剩余左括号数目多余右括号数目
class Solution(object):
res = []
curr_path = []
def generateParenthesis(self, n):
"""
:type n: int
:rtype: List[str]
"""
self.res = []
self.curr_path = []
self.curr_path = ["" for i in range(2 * n)]
self.gen(n, n, 0, n)
return [''.join(a) for a in self.res]
# left_cnt 剩余左括号数目 right_cnt: 剩余右括号数目
def gen(self, left_cnt, rigth_cnt, index, n):
if left_cnt > rigth_cnt or left_cnt < 0 or rigth_cnt < 0:
return
if (index >= 2 * n):
self.res.append(list(self.curr_path))
return
# 当前位置填左括号
self.curr_path[index] = '('
self.gen(left_cnt-1, rigth_cnt, index + 1, n)
# 当前位置填右括号
self.curr_path[index] = ')'
self.gen(left_cnt, rigth_cnt-1, index + 1, n)