22.括号生成

leetcode

先选定一对括号,生成的序列可以写为(left)right,其中 leftright 分别为 i 对括号和 n-i-1 对括号的序列。

再利用递归计算 leftright

时间复杂度:O(4n/√n)
空间复杂度:O(4n/√n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var cache = make(map[int][]string)

func generateParenthesis(n int) []string {
return generate(n)
}

func generate(n int) []string {
if n == 0 {
return []string{""}
}

if n == 1 {
return []string{"()"}
}

if c, ok := cache[n]; ok {
return c
}

result := []string{}
for i := 0; i < n; i++ {
left := generate(i)
right := generate(n - i -1)

for _, l := range left {
temp := fmt.Sprintf("(%s)", l)
for _, r := range right {
result = append(result, fmt.Sprintf("%s%s", temp, r))
}
}

}

cache[n] = result
return result
}

22.括号生成
https://blog.jerrylee.me/2021/09/347672d66136.html
作者
Jerry Lee
发布于
2021年9月20日
许可协议