题目:
给定一个仅包含数字
2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
来源:力扣(LeetCode)
链接:力扣
示例:
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:输入:digits = ""
输出:[]
示例 3:输入:digits = "2"
输出:["a","b","c"]
解法:
建立数字和对应字母的字典,使用广度优先遍历思想。最外层循环是输入的数字长度,第1次由于结果(result)为空,所以将第1个数字对应的所有字母逐个添加到result中,从第2次起更新result中的值。首先遍历result(中层循环),取result中每个值(s),接着把当前数字对应的所有字母逐个添加到s的末尾(内层循环)。
代码:
class Solution: def letterCombinations(self, digits: str) -> List[str]: phone = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'} result = [] for time, digit in enumerate(digits): if time == 0: for letter in phone[digit]: result.append(letter) else: new_result = [] for s in result: for letter in phone[digit]: new_result.append(s + letter) result = new_result return result