文章目录
leetcode22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
方法:DFS回溯
思路:
首先,这种类似全排列的问题,我们考虑到的方法就是深度优先搜索DFS回溯,从第一个字符开始,每个字符可能是左括号或右括号,然后不断将不符合条件的剪枝,最后输出所有满足条件的n对括号的字符串。
我们思考在DFS过程中,什么样的括号是不满足条件的,这里随便举几个例子:
")","())","))()"
可以看出,不符合情况的字符串,都是在生成字符串的过程中,右括号的数量大于了左括号的数量。也就是说,我们在DFS的过程中,**遇到右括号数量大于左括号数量的情况,就需要剪枝。**因为我们需要保证s的左括号数大于等于右括号数,所以只要左括号数量小于n,就可以填写左括号ÿ