LeetCode刷题之17.电话号码的字母组合
我不知道将去向何方,但我已在路上! |
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
- 示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
- 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
- 代码:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
def fun(list_a,char_b):
zidian = {'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'],}
result = []
for i in list_a:
for j in zidian[char_b]:
result.append(i + j)
return(result)
zidian = {'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'],}
if digits == "":
return []
s = zidian[digits[0]]
for i in range(1,len(digits)):
s = fun(s,digits[i])
return(s)
- 算法说明:
建立一个子函数fun,用来进行排列,函数有两个参数,一个是已经排列好列表list_a,一个是待排列的字母char_b;在函数中先建立一个字典zidian,用来存储每个按键对应的字母列表。使用两层循环,第一层循环从已有的列表中选择元素,第二层循环从对应的字典元素中选择字母,将两层元素组合成字符串存储在result中,并返回。
在函数之外,判断digits是否为空,如果为空返回[ ];将digits中第一个数字digits[0]对应的字母列表zidian[digits[0]]赋值给s。然后逐个遍历digits中的元素,用fun函数进行运算,逐步迭代,返回结果s。