给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 来源:力扣(LeetCode) |
1)递归 2)队列
其他人的解法没有用字典,而是用了数组,说是可以节省内存 |
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dict1 = {
"2":"abc",
"3":"def",
"4":"ghi",
"5":"jkl",
"6":"mno",
"7":"pqrs",
"8":"tuv",
"9":"wxyz"
}
if(len(digits) == 0): #特殊案例:""
return []
res = []
def dfs(string, index):
if(index == len(digits)):
res.append(string)
return
num = digits[index] #取当前数字
chars = dict1[num] #取当前数字对应的字符串
for i in chars:
dfs(string+i, index+1)
dfs("", 0)
return res
'''
以"23"为例:
递归调用
dfs("", 0)
dfs("a", 1)
dfs("ad", 2)
dfs("ae", 2)
dfs("af", 2)
dfs("b", 1)
dfs("bd", 2)
dfs("be", 2)
dfs("bf", 2)
dfs("c", 1)
dfs("cd", 2)
dfs("ce", 2)
dfs("cf", 2)
'''
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dict1 = {
"2":"abc",
"3":"def",
"4":"ghi",
"5":"jkl",
"6":"mno",
"7":"pqrs",
"8":"tuv",
"9":"wxyz"
}
if(len(digits) == 0): #特殊案例:""
return []
res = [""]
for digit in digits:
queueSize = len(res)
while(queueSize):
tmp = res.pop(0)
for char in dict1[digit]:
res.append(tmp+char)
queueSize-=1
return res