题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
题目大意
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
解题思路
建立列表或者字典,可以采取递归的方法,最简单的方法是使用itertools.product
进行笛卡尔积计算
代码
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return list()
dict = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
['j', 'k', 'l'],
['m', 'n', 'o'],
['p', 'q', 'r', 's'],
['t', 'u', 'v'],
['w', 'x', 'y', 'z']
]
# 因为手机数字键 0 和 1 都是空的,所以从 2 开始取值,索引 0 对应数字键 2
groups = (dict[int(digit) - 2] for digit in digits)
# 使用itertools.product进行笛卡尔积计算
return ["".join(combine) for combine in itertools.product(*groups)]