1 Star 0 Fork 0

chintensakai/leetcode-golang

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
code22.go 1.12 KB
一键复制 编辑 原始数据 按行查看 历史
chintensakai 提交于 2023-10-14 00:24 . 1013 - 完结:go专业级已过
package main
import "fmt"
// 22. 括号生成
func generateParenthesis(n int) []string {
var ans []string
parentNums := []int{n, n} // 开局左右括号分别有n个
dfs(n, "", parentNums, &ans) // 传切片指针才行,直接穿ans,没有用,或者把dfs写成闭包
return ans
}
func dfs(n int, path string, parentNums []int, ans *[]string) {
if len(path) == 2*n {
*ans = append(*ans, path) // 字符串可以直接append,不用深拷贝
return
}
// 做选择。只有左右括号两种选择
if parentNums[0] > 0 { // 只要还有左括号,就可以选择
path += "("
parentNums[0]--
dfs(n, path, parentNums, ans)
path = path[:len(path)-1]
parentNums[0]++
}
if parentNums[1] > 0 && parentNums[1] > parentNums[0] {
// 右括号还有,而且左括号剩的个数比左括号多,才可以选右括号,如果比左括号少,这种场景在前面的过程中已经排除掉了
path += ")"
parentNums[1]--
dfs(n, path, parentNums, ans)
path = path[:len(path)-1]
parentNums[1]++
}
}
// 分别记录左括号个数,右括号个数
func main22() {
fmt.Println(generateParenthesis(3))
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chintensakai/leetcode-golang.git
git@gitee.com:chintensakai/leetcode-golang.git
chintensakai
leetcode-golang
leetcode-golang
main

搜索帮助