LeetCode-17 电话号码的字母组合
如果大家有任何不明白的,直接评论就好啦。可以留自己的邮箱,这样可以方便直接回复,嘿嘿嘿。
电话号码的字母组合
题目描述
给定一个仅包含数字 $2-9$ 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 $1$ 不对应任何字母。
数据样例
示例 1:
1 | 输入:digits = "23" |
示例 2:
1 | 输入:digits = "" |
示例 3:
1 | 输入:digits = "2" |
提示:
- $0 \leq digits.length \leq 4$
digits[i]
是范围['2', '9']
的一个数字。
深度优先搜索 DFS
- $O(4 ^ N)$
深度优先搜索 DFS
由于题目的 数据范围很小($N$ 很小,每个按键上的数字很少),因此可以直接暴力搜索。
DFS
搜索过程:
- 枚举
digits
数组中的所有按钮 - 对于当前按钮而言,枚举对应按钮上的所有字符
为了帮助大家理解 DFS
的搜索过程,下述绘制了 DFS
搜索空间树
DFS
是对下述树的一个前序遍历的过程
DFS
搜索空间树如下图所示:
- 每个节点存储的是当前搜索的信息,其中
string
是当前已经选择的字符构成的字符串 - 每条边对应每次搜索过程中选择按钮上的哪个字符
DFS
搜索代码可能不容易写,具体大家可以结合代码和上述空间树来一起理解 DFS
的过程。
时间复杂度 - $O(4 ^ N)$
- 由于每个按钮上最多有 $4$ 个字符,对应上面图中树的每个点的出边最多 $4$ 条
digits
数组长度为 $N$,因此树一共最多 $N$ 层
因此时间复杂度为:$O(4 ^ N)$
代码
1 | func letterCombinations(digits string) []string { |
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cat's Blog!
评论