- 题目描述
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
- 示例
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
- 思路一
pythons的列表推导式嵌套。
- 代码一
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
key = {
'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 digits == '':
return []
ans = ['']
for num in digits:
ans = [pre+suf for pre in ans for suf in key[num]]
return ans
- 思路二
递归,每次递归只遍历最靠前的数字对应的字母
- 代码二
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
#递归
d = {
'2':'abc','3':'def','4':'ghi','5':'jkl',
'6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
if digits == '':
return []
if len(digits) == 1:
return [x for x in d[digits[0]]]
return [x + y for x in d[digits[0]] for y in self.letterCombinations(digits[1:])]