17.电话号码的字母组合

题目描述:
见: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

代码:

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if not digits:
            return []
        mapping = {
            '2':'abc',
            '3':'def',
            '4':'ghi',
            '5':'jkl',
            '6':'mno',
            '7':'pqrs',
            '8':'tuv',
            '9':'wxyz'}
        res = [c for c in mapping[digits[0]]]
        for d in digits[1:]:
            res = [prev + cur for prev in res for cur in mapping[d]]
        return res


从下到上的循环思路分析:

字符串中可能会有多个数字,假设我们一个一个地将其中的数字取出。当取第一个数字时,可能会有三个或四个组合。然后当我们取第二个数字时,做一个全排列即可。关键是从第三个数字开始,每一个新来的数字都可以用到前面的结果,这样就避免了大量的重复。

你可能感兴趣的:(17.电话号码的字母组合)