1. 括号生成问题解析
括号生成是力扣(LeetCode)平台上经典的递归与回溯算法练习题(编号22题,原输入可能有误)。这个问题要求我们生成所有由n对括号组成的合法组合。比如当n=3时,有效的组合是:["((()))","(()())","(())()","()(())","()()()"]。
这个看似简单的问题实际上考察了多个核心算法概念:
- 递归与回溯的实现
- 剪枝条件的判断
- 字符串拼接的性能考量
- 合法括号序列的数学特性
合法括号序列必须满足两个基本条件:
- 任意前缀中,左括号数量 ≥ 右括号数量
- 整个字符串中,左括号数量 = 右括号数量
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归回溯解法详解
2.1 基础递归实现
最直观的解法是使用递归生成所有可能的组合,然后筛选出合法的。但这种方法效率极低,时间复杂度是O(2^(2n)),当n=10时就需要处理百万级别的组合。
python复制def generateParenthesis(n):
def generate(current, pos, result):
if pos == 2*n:
if valid(current):
result.append("".join(current))
else:
current[pos] = '('
generate(current, pos+1, result)
current[pos] = ')'
generate(current, pos+1, result)
def valid(current):
balance = 0
for c in current:
if c == '(': balance += 1
else: balance -= 1
if balance < 0: return False
return balance == 0
result = []
generate(['']
