17. 电话号码的字母组合
1. 题目
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
1 | 输入:digits = "23" |
示例 2:
1 | 输入:digits = "" |
示例 3:
1 | 输入:digits = "2" |
提示:
0 <= digits.length <= 4
digits[i]
是范围['2', '9']
的一个数字。
2. 思路
- 初始化数字按钮哈希表映射,KEY为数字按钮的值,VALUE则为数字按钮对应可能的英文字符数组
- 当输入的数字为0时,直接返回空数组,本题主要思想采用的是DFS回溯算法
- 初始化结果字符串数组
result
,定义dfs
函数,入参为:result
结果数组,arr
字符数组,index
下标,str
构建的字符串 - DFS函数中,如果
str
的长度与输入的字符串长度一致,则说明已得到一个结果,则可直接写入结果数组result
中 - 否则根据当前
index
下标对应的数字字符从数字按钮哈希表映射中获取对应数字的英文字符数组,并遍历该英文字符数组,取出字符后追加到str
末尾处,同时重复调用dfs
函数,并将index + 1
,以便深入拼接各类可能存在的字符串 - 完成遍历后,将可变字符串
str
的末尾字符删除,以便进行下一轮字符的遍历,整体效果如下所示:
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:
O(4^n)
,其中4
为每个数字按键对应的最长字符数量,n
为对应的按键输入长度 - 空间复杂度:
O(n)