17.电话号码的字母组合

from typing import List
import collections
# 这道题可以用深搜或者广搜来解决
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
##先定义数字和字母的字典
dic = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}
# 定义变量用来接收最后的结果
self.res = []
# 如果字符串为空就返回空
if len(digits) == 0:return self.res
# 定义一个双端队列。
deque = collections.deque()
# 注意这里,要添加一个为空的东西。
deque.append("")
# 进行遍历。首先需要遍历传入的字符串。
for index1 in range(len(digits)):
# 然后遍历次数为双端队列的长度。
for index2 in range(len(deque)):
# 取得每一个数字对应的字母的值。
now_str = dic[digits[index1]]
print(now_str)
# 将队列最左端的字符踢出,用来和对应字母相加。
now_deque_str = deque.popleft()
# 遍历每一个数字对应的字母
for index3 in now_str:
print(111)
# 注意这里,是要把刚才最左端踢出的字符串,在和index3字符相加
# 然后添加进队列的最右端。
deque.append(now_deque_str + index3)
print("当前队列的值",deque)
return list(deque)
# 这是用的递归的方法。
def letterCombinations1(self, digits: str) -> List[str]:
# 同样需要先定义一个字典。用来表示数字对应的字母
dic = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}
# 定义变量用来接收最后的字符串。
self.res = []
if len(digits) == 0: return self.res
self.dfs(dic,digits,"",0)
return self.res
def dfs(self,dic,digits,now_str,depth):
# dic:自己定义的字典。digits:入参的字符串。
# now_str:递归用来接收字符串的变量
# depth:深度,
if depth == len(digits):
self.res.append(now_str)
return
# 这里只有一步就好了。
for letter_str in dic[digits[depth]]:
self.dfs(dic,digits,now_str + letter_str,depth + 1)


A = Solution()
print(A.letterCombinations1("2"))
posted @ 2020-08-26 20:11  月为暮  阅读(273)  评论(0编辑  收藏  举报