题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
解题思路
(用昨天大佬每日一题的思路,很简单地就过了)
首先为了书写代码的简洁,建立字典来保存数字字符与字母字符的对应关系。
num_list = {'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']}
对于每个数字字符有3-4字母字符与之对应,故可以使用DFS的方法对每个数字字符选择的字母字符进行递归
以‘23’为例
设初试字符串为’’,首先读入‘2’,可以得到’a’、‘b’、‘c’;分别以’a’、‘b’、‘c’为初始字符串,读入’3’,将3对应的字母字符分别添加到初始字符串,可以得到最终结果。
python代码
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
num_list = {'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']}
if not digits:
return []
total = []
def Letter(digits, temp):
nums = digits[0]
for i in num_list[nums]:
#需要将数字对应的字母分别加到初始字符串尾部,所以需要对初始字符串进行copy,以实现'a' 'b' 'c',而不是'abc'
single = temp
single = single+i
if len(digits)==1:
total.append(single)
else:
Letter(digits[1:],single)
Letter(digits,'')
return total