17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
Example
input |
---|
"23" |
output |
["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. |
Note
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
思路
标准 d f s dfs dfs和 b f s bfs bfs可以解决的题目,可以巩固一下知识
代码如下
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
pre = {'2':['a', 'b', 'c'],
'3':['d', 'e', 'f'],
'4':['g', 'h', 'i'],
'5':['j', 'k', 'l'],
'6':['m', 'n', 'o'],
'7':['p', 'q', 'r', 's'],
'8':['t', 'u', 'v'],
'9':['w', 'x', 'y', 'z']}
"""
#dfs
def dfs(ans, x):
if x == len(digits):
res.append(ans)
else:
ch = digits[x]
for i in pre[ch]:
dfs(ans + i, x + 1)
res = []
dfs("", 0)
return res
"""
#bfs
q = []
ans = []
for ch in pre[digits[0]]:
q.append(ch)
while q:
s = q.pop()
if len(s) == len(digits):
ans.append(s)
else:
for ch in pre[digits[len(s)]]:
q.append(s + ch)
return ans