22. 括号生成
题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路
1>源代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def helper(temp_ans, left, right):
if len(temp_ans)==2*n:
ans.append(''.join(temp_ans))
return
if left<n:
temp_ans.append('(')
helper(temp_ans, left+1, right)
temp_ans.pop()
if right<left:
temp_ans.append(')')
helper(temp_ans, left, right+1)
temp_ans.pop()
return
helper([], 0, 0)
return ans
2>算法介绍
本题又是一道经典的回溯算法题。由于题目要求构造括号,并且要求构造的括号是有效的,那么我们就可以去寻找规律:
如果左括号数量不大于n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。
想明白了如上规律,我们直接采用回溯算法的格式编写代码即可。