LeetCode刷题之17.电话号码的字母组合

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)
# 执行用时 :68 ms, 在所有 Python3 提交中击败了18.83%的用户
# 内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.30%的用户
  • 算法说明:
    建立一个子函数fun,用来进行排列,函数有两个参数,一个是已经排列好列表list_a,一个是待排列的字母char_b;在函数中先建立一个字典zidian,用来存储每个按键对应的字母列表。使用两层循环,第一层循环从已有的列表中选择元素,第二层循环从对应的字典元素中选择字母,将两层元素组合成字符串存储在result中,并返回。
    在函数之外,判断digits是否为空,如果为空返回[ ];将digits中第一个数字digits[0]对应的字母列表zidian[digits[0]]赋值给s。然后逐个遍历digits中的元素,用fun函数进行运算,逐步迭代,返回结果s。
发布了90 篇原创文章 · 获赞 1 · 访问量 1051

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/102666437