• *的字母组合


    题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    来源:

    法一:自己的代码

    思路:无脑暴力循环,毫无技术含量

    class Solution:
        def letterCombinations(self, digits: str):
            l = len(digits)
            dict = { 2:'abc', 3:'def', 4:'ghi', 5:'jkl',
                     6:'mno', 7:'pqrs',8:'tuv', 9:'wxyz'}
            # 对字典中的字符串进行分割
            def fenge(x):
                x_list = []
                for i in range(len(x)):
                    x_list.append(x[i])
                return x_list
            # 对两个list进行笛卡尔积合并
            def hebin(x,result):
                if len(result) == 0:
                    return x
                else:
                    result_ = []
                    for i in x:
                        for j in result:
                            result_.append(j+i)
                return result_
            # 如果l为空,直接返回[]
            if l == 0:
                return []
            result = []
            # for循环实现list的合并
            for i in range(l):
                a = digits[i]
                dic_val = dict[int(a)]
                dic_val = fenge(dic_val)
                result = hebin(dic_val, result)
            return result
    if __name__ == "__main__":
        duixiang = Solution()
        a = duixiang.letterCombinations('3')
        print(a)
    View Code

    法二:官网的代码

    思路:利用回朔算法,回朔的终止条件是从digits中都取了一个字符了,否则继续,回朔函数每次都合并一个字母,这个算法耗时最短,超过百分之99的用户.

    class Solution:
        def letterCombinations(self, digits):
            """
            :type digits: str
            :rtype: List[str]
            """
            phone = {'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']}
    
            def backtrack(combination, next_digits):
                if len(next_digits) == 0:
                    # 如果next_digits长度为0,则说明从digits中的每个数中都取了一个字母了.
                    # 则将得到的字符串放入output中
                    output.append(combination)
                # 否则继续取字符
                else:
                    # 由于每个数字对应多个字母,故用for循环
                    for letter in phone[next_digits[0]]:
                        # 每次回朔的时候都把for循环中的数字去掉,并且把letter合并如combination中
                        backtrack(combination + letter, next_digits[1:])
            output = []
            if digits:
                backtrack("", digits)
            return output
    
    if __name__ == "__main__":
        duixiang = Solution()
        a = duixiang.letterCombinations('23')
        print(a)
    View Code
  • 相关阅读:
    【python中调用shell命令使用PIPE】使用PIPE作为stdout出现假卡死的情况——将stdout重定向为输出到临时文件
    二分查找
    MongoDB安装及启动
    Python文件IO(普通文件读写)
    Python面向对象--高级(二)
    Python面向对象--高级(一)
    Python类与对象--基础
    Python生成器、装饰器
    Python函数式编程
    Python函数及参数
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11923336.html
Copyright © 2020-2023  润新知