17.电话号码的字母组合

leetcode

深度优先遍历,注意这里每次选取数字必定会选取一个对应字母,不存在不选的情况。

时间复杂度:O(3^m x 4^n)
空间复杂度:O(m+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
37
38
39
40
func letterCombinations(digits string) []string {
if digits == "" {
return []string{}
}

letterMap := map[string][]string{
"2": {"a", "b", "c"},
"3": {"d", "e", "f"},
"4": {"g", "h", "i"},
"5": {"j", "k", "l"},
"6": {"m", "n", "o"},
"7": {"p", "q", "r", "s"},
"8": {"t", "u", "v"},
"9": {"w", "x", "y", "z"},
}

cur := ""
results := []string{}
var dfs func(int)

dfs = func(i int) {
if i == len(digits) {
results = append(results, cur)
return
}

d := string(digits[i])
letters := letterMap[d]

for _, l := range letters {
cur = cur + l
dfs(i + 1)
cur = string(cur[:len(cur) - 1])
}
}

dfs(0)

return results
}

17.电话号码的字母组合
https://blog.jerrylee.me/2021/09/59ae4316663b.html
作者
Jerry Lee
发布于
2021年9月20日
许可协议