项目场景:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = "" 输出:[]
示例 3:
输入:digits = "2" 输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i]
是范围['2', '9']
的一个数字。
问题描述
如果digits为空,直接返回空数组。将2-9相应的字母组合加到列表phone中,初始化队列之后遍历digit, 利用广度优先搜索BFS遍历队列中的所有组合,将此时队列中的第一个组合设为x,之后遍历此时数字对应的字母,ord('2')
是 50
,所以 ord(digit) - 50
将数字 2-9
映射到 0-7;
将x+此时的字母添加到queue队列中,循环结束后返回即可。下面是一个例子,digit为‘23’。
-
初始化:
phone = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'] queue = ['']
-
处理数字
2
:-
当前队列:
['']
-
取出
''
,添加a
、b
、c
:queue = ['a', 'b', 'c']
-
-
处理数字
3
:-
当前队列:
['a', 'b', 'c']
-
取出
a
,添加d
、e
、f
:queue = ['b', 'c', 'ad', 'ae', 'af']
-
取出
b
,添加d
、e
、f
:queue = ['c', 'ad', 'ae', 'af', 'bd', 'be', 'bf']
-
取出
c
,添加d
、e
、f
:queue = ['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
-
-
返回结果:
['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
输出:
['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
class Solution:
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)):
x=queue.pop(0)
for letter in phone[ord(digit)-50]:
queue.append(x+letter)
return queue
代码提交情况。
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!