括号生成问题:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:["((()))", "(()())", "(())()", "()(())", "()()()"]。
时间: 2024-03-06 10:48:12 浏览: 77
python 实现有效的括号
好的,这是一个经典的回溯算法问题,可以通过递归实现。具体思路如下:
1. 定义一个递归函数 `generate`,传入三个参数:当前括号字符串 `cur_str`、当前左括号数量 `left`、当前右括号数量 `right`。
2. 当 `left == right == n` 时,说明已经生成了一组合法的括号字符串,将其保存在结果数组中,并结束递归。
3. 如果当前左括号数量小于 n,说明可以继续添加左括号,调用 `generate` 函数,传入 `cur_str + "("`、`left + 1`、`right` 三个参数。
4. 如果当前右括号数量小于左括号数量,说明可以继续添加右括号,调用 `generate` 函数,传入 `cur_str + ")"`、`left`、`right + 1` 三个参数。
以下是实现该算法的 Python 代码:
```python
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
def generate(cur_str, left, right):
if left == right == n:
res.append(cur_str)
return
if left < n:
generate(cur_str + "(", left + 1, right)
if right < left:
generate(cur_str + ")", left, right + 1)
generate("", 0, 0)
return res
```
时间复杂度为 $O(4^n / \sqrt{n})$,空间复杂度为 $O(4^n / \sqrt{n})$。
阅读全文