给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
解题思路:
1.用字典存储数字和其对应的字母,注意数字也为字符格式
2.对于每一个数字,都等于当前列表中的字符在加上该数字对应的字符
3.用列表生成器不能使用两层循环,否则会超出内存
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dic={'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'}
res=['']
if digits=='':
return []
for i in digits:
res=[x+y for x in res for y in dic[i]]
return res
解法二:
递归写法:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dic={'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'}
res=[]
def backtrack(combin,next_digits):
if len(next_digits)==0:
res.append(combin)
else:
for char in dic[next_digits[0]]:
backtrack(combin+char,next_digits[1:])
if digits:
backtrack('',digits)
return res