Leetcode 17. 电话号码的字母组合
题目说明
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
题目解析
Python代码
1.队列回溯
def letterCombinations(self, digits: str) -> List[str]:
if not digits: return []
phone = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
queue = [''] # 初始化队列
for digit in digits:
for _ in range(len(queue)):
tmp = queue.pop(0)
for letter in phone[ord(digit) - 50]: # 这里我们不使用 int() 转换字符串,使用ASCII码
queue.append(tmp + letter)
return queue
- 递归回溯
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
result = []
dic = {
'2': "abc",
'3': "def",
'4': "ghi",
'5': "jkl",
'6': "mno",
'7': "pqrs",
'8': "tuv",
'9': "wxyz"
}
def caculate(r, index):
if index == len(digits):
result.append(r)
return
val = dic.get(digits[index])
for i in val:
caculate((r + i), index + 1)
caculate('', 0)
return result