题目分析:
这一题是让输入正整数n表示n对括号,然后输出括号所有匹配数,与【LeetCode】17. Letter Combinations of a Phone Number是有些相似的,因为可能的情况很多用循环没法解决,这时候考虑递归或动态规划,递归的代码比较简单,用递归便可解决。
代码说明:
1、def dfs(res, string, n, l, r):,递归函数的参数意义分别为,返回用的结果列表res,当前括号匹配字符串string,括号对数n,目前左括号数l,目前右括号数r。
2、左括号数等于括号对数时,只需加入剩余右括号,当前匹配字符串括号匹配结束,加入res。
if l == n:
for i in range(r, n):
string += ')'
res.append(string)
return
3、左括号等于右括号或者当前一个括号也没有时只能加入左括号,并把左括号数+1。
elif l == 0 or l == r:
string +='('
dfs(res, string, n, l + 1, r)
4、其他情况既能加入左括号又能加入右括号,且把相应的符号数+1。
else:
dfs(res, string + ')', n, l, r + 1)
dfs(res, string + '(', n, l + 1, r)
测试代码:
class Solution:
def generateParenthesis(self, n):
res = []
def dfs(res, string, n, l, r):
if l == n:
for i in range(r, n):
string += ')'
res.append(string)
return
elif l == 0 or l == r:
string +='('
dfs(res, string, n, l + 1, r)
else:
dfs(res, string + ')', n, l, r + 1)
dfs(res, string + '(', n, l + 1, r)
dfs(res, '', n, 0, 0)
return res
print(Solution().generateParenthesis(3)) #提交时请删除此行

本文介绍了一种使用递归算法解决括号匹配问题的方法,通过定义递归函数并设置参数,实现了对输入的正整数n表示的n对括号的所有匹配组合的输出。该方法与LeetCode上17题的电话号码字母组合类似,适用于多种编程场景。
&spm=1001.2101.3001.5002&articleId=88072703&d=1&t=3&u=62d985ee5c3649d99fb188a1bc254842)
440

被折叠的 条评论
为什么被折叠?



