美文网首页LeetCode
LeetCode-17 - Letter Combination

LeetCode-17 - Letter Combination

作者: 空即是色即是色即是空 | 来源:发表于2017-11-21 20:40 被阅读14次

    Given a digit string, return all possible letter combinations that the number could represent.

    A mapping of digit to letters (just like on the telephone buttons) is given below.


    Input:Digit string "23"
    Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

    Solution1

    class Solution(object):
        def letterCombinations(self, digits):
            """
            :type digits: str
            :rtype: List[str]
            """
            amap = {"2":"abc", "3":"def", "4":"ghi", "5":"jkl", "6":"mno", "7":"pqrs", "8":"tuv", "9":"wxyz"}
            if not digits:
                return []
            return [item for item in reduce(self.combinate, [amap[i] for i in digits])]
            
        def combinate(self, *args):
            return reduce(self.join, args)
    
        def join(self, astr, bstr):
            for i in astr:
                for j in bstr:
                    yield i+j
    

    Solution2

    更加简洁

    class Solution:
        # @return a list of strings, [s1, s2]
        def letterCombinations(self, digits):
            if '' == digits: return []
            kvmaps = {
                '2': 'abc',
                '3': 'def',
                '4': 'ghi',
                '5': 'jkl',
                '6': 'mno',
                '7': 'pqrs',
                '8': 'tuv',
                '9': 'wxyz'
            }
            return reduce(lambda acc, digit: [x + y for x in acc for y in kvmaps[digit]], digits, [''])
    

    思考:

    • 列表生成可以容纳多个循环体
    • reduce的功能极其强大,使用之前要递归地考虑清楚
    • 列表操作1
    a = ['']
    b = ['123']
    print [i + j for i in a for j in b]    # ['123']
    print len(a)  # 1
    

    相关文章

      网友评论

        本文标题:LeetCode-17 - Letter Combination

        本文链接:https://www.haomeiwen.com/subject/abfgvxtx.html