leetcode-电话号码的字母组合
题目描述
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
输入输出
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
算法思想-回溯
- 使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作
- 回溯过程中维护一个字符串,表示已有的字母排列,该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。
- 然后进行回退操作,遍历其余的字母排列
代码实现
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
phoneMap = {
"2":"abc",
"3":"def",
"4":"ghi",
"5":"jkl",
"6":"mno",
"7":"pqrs",
"8":"tuv",
"9":"wxyz",
}
n = len(digits)
ans = []
tmp = []
def backtrack(index):
if index==n:
ans.append("".join(tmp))
else:
digit = digits[index]
for letter in phoneMap[digit]:
tmp.append(letter)
backtrack(index+1)
tmp.pop()
backtrack(0)
return ans