给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = "" 输出:[]
示例 3:
输入:digits = "2" 输出:["a","b","c"]
解答(队列)
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
#不存在返回空
if not digits:
return []
#建立数组
d = [" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
#数组中加入一个空字符
res = [""]
for i in digits:
length = len(res)
letters = d[ord(i)-48] #遍历字符,查找字典中对应的字符串
for _ in xrange(length):
tmp = res.pop(0) #取出队列中的第一个元素
for j in letters:
res.append(tmp+j) #分别跟后一位字符拼接,放回队列
return res
例如,23
a b c
b c ad ae af
c ad ae af bd be bf
ad ae af bd be bf cd ce cf
解答(递归)
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
#不存在返回空
if not digits:
return []
#建立List
d = [" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
res = []
#递归函数
def dfs(tmp,index):
#index标记遍历字符串的位置
if index==len(digits):
res.append(tmp) #tmp相当于a b c以及后面分别加上d e f
return
x = digits[index]
#查找字典 ord(x)-48就是获取x的ascll码减去0
letters = d[ord(x)-48]
#遍历字符串,例如2对应的就是abc
for i in letters:
dfs(tmp+i,index+1)
dfs("",0)
return res
例如,23
2
a b c
3 3 3
def def def
经过树状结构最后得到,ad ae af bd be bf cd ce cf
给定一个只包含2-9的数字字符串,根据电话按键的映射关系,返回所有可能的字母组合。文章提供了两种解法,一种使用队列进行广度优先搜索,另一种采用递归方法。示例展示了不同输入下的输出结果。
760





