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

浙公网安备 33010602011771号