剑指 Offer II 085. 生成匹配的括号
每日几道leetcode刷刷题!
JZ-Offer085
题目描述
正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
代码
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
#left_num,right_num表示左右括号的数目
def backtrack(left_num, right_num, st):
if left_num + right_num == 2 * n: #一个组合完成后
res.append(st)
return
#局部不合法,不再递归
if left_num < n:
backtrack(left_num+1, right_num, st+'(')
if right_num < left_num:
backtrack(left_num, right_num+1, st+')')
backtrack(1, 0, '(')
return res
总结
- 第一个符合条件的一定是’ ( ';
- 添加’ ) ‘时应该注意左边有几个’ ( ';
- 当前位置是否能添加’ ( ‘,需要看之前的’('数目是否<n;
- 当left_num + right_num == 2 * n时,表示一个组合完成了,添加到res中.