[Day44]-[回溯]- 括号生成
作者:方勇(gopher)
- 2022 年 5 月 19 日
本文字数:526 字
阅读完需:约 2 分钟
22. 括号生成
数字
n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
复制代码
示例 2:
输入:n = 1
输出:["()"]
复制代码
题解:
func TestGenerateParenthesis(t *testing.T) {
var n = 3 // 括号数
var res []string // 结果集
var backtrack func(left, right int, track string) // 回溯
backtrack = func(left, right int, track string) {
if left < 0 || right < 0 { // 如果越过边界返回
return
}
// ))(( 右括号数 先大于 左括号数 直接返回
if right < left {
return
}
if left == 0 && right == 0 { // 获取结果
res = append(res, track)
return
}
track += "(" // 做选择
backtrack(left-1, right, track) // 进入下个递归
track = track[:len(track)-1] // 撤销选择
track += ")" // 做选择
backtrack(left, right-1, track) // 进入下个递归
track = track[:len(track)-1] // 撤销选择
}
backtrack(n, n, "") // 开始穷举
t.Log(res)
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 4
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论