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_resif (left == n) and (right == n):all_res.append(res)return all_resif 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_resall_res = helper('',0,0,[])return all_res