难度中等1683
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
提示:
1 <= n <= 8
方法一:回溯法
思路和算法
我们可以只在序列仍然保持有效时才添加 '(' or ')',而不是像 方法一 那样每次添加。我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点,
如果左括号数量不大于 nn,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/generate-parentheses/solution/gua-hao-sheng-cheng-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
ans = []
def back(S,left,right):
if len(S)==2*n:
ans.append(''.join(S))
return
if left < n:
S.append("(")
# print("1.",S)
back(S,left+1,right)
# print("2.",S)
S.pop()
if right < left:
S.append(")")
# print("3.",S)
back(S,left,right+1)
# print("4.",S)
S.pop()
back([],0,0)
return ans