括号生成。给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
1 |
|
思路一
穷举法,遍历 $2^{2n}$ 个可能的组合,判断有效的组合。时间复杂度 $O(n2^{2n})$。
1 |
|
可以进行剪枝,提前终止。
1 |
|
思路二
回溯法,通过记录 (
和 )
放置的数量,与思路一每次都放一个 (
或 )
不同的是,这里当 (
的数目小于总数目时,就可以放置一个 (
;当 )
的数目小于 (
的数目时,就可以放置一个 )
。
时间复杂度取决于最终正确的结果中的括号的数目,计算得 \(\frac{1}{n+1} \binom{2n}{n}\),其上界约为 $\frac{4^n}{n\sqrt{n}}$。故时间复杂度为 $O(\frac{4^n}{\sqrt{n}})$,空间复杂度 $O(n)$。
1 |
|