LeetCode22. 括号生成

题目:

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

有效括号组合需满足:左括号必须以正确的顺序闭合。

用例:

输入:n = 3

输出:["((()))","(()())","(())()","()(())","()()()"]

记录:

很经典的回溯搜索方法,写出来代码应该都差不多。方法就是对当前左括号数量和右括号数量回溯,如果左括号数小于给定的n则说明还可以继续放置左括号,进入新一轮回溯;如果右括号数量小于左括号数量说明当前放置右括号合法,则放置右括号并进入新一轮回溯。结束条件是当前字符串长度等于给定n的2倍,即括号个数。

还有递归方法, 视为(a)b的递归式,其中a,b为满足条件的合法括号序列,但理解麻烦而且没什么时空优势,不建议看。

代码(python):

class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        res = []

        def traceback(left,right,now):
            if (len(now)==n*2):
                now = ''.join(now)
                res.append(now)
                return
            if (left < n):
                now.append('(')
                traceback(left+1,right,now)
                now.pop()
            if(right < left):
                now.append(')')
                traceback(left,right+1,now)
                now.pop()
                
        traceback(0,0,[])
        return res

 

posted @ 2021-11-20 12:21  启元  阅读(27)  评论(0)    收藏  举报