方法:回溯法
实现原理:回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。
实际代码:创建第两个数组,第一个数组list1是临时数组,第二个数组lsit2是return数组。
一边遍历所有数字,一边放入第一个数组,等遍历所有的数字,统一加进第二个数组。第一遍查找完所有字母后,pop最后一个元素,更换元素再输出
假设输出为‘234’
list1 ->‘a’ ->‘a’,‘d’ ->‘a’,‘d’,‘g’->
list2->‘adg’->
list1->‘a’,‘d’->‘a’,‘d’,‘h’
list2->‘adh’->
list1->‘a’,‘d’->‘a’,‘d’,‘i’
list2->‘adi’->
list1->‘a’,‘d’->‘a’->‘a’,‘e’’->‘a’,‘e’,‘g’
list2->‘aeg’->就这样回溯下去
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if len(digits) == 0:
return []
# 创建字典记得写,
dict1 = {
'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'
}
def backtrack(index: int):
if index == len(digits):
list2.append(''.join(list1))
else:
digit = digits[index]
for i in dict1[digit]:
list1.append(i)
backtrack(index + 1)
list1.pop()
list1 = []
list2 = []
backtrack(0)
return list2
朋友们看完觉得有帮助可以点个赞,希望能帮到大家!