17. Letter Combinations of a Phone Number电话号码的字母组合Python

给定一个包含数字(2-9包含在内)的字符串,请返回该数字可以表示的所有可能的字母组合。

下面给出了数字到字母的映射(就像在电话按钮上一样)。请注意,1不会映射到任何字母。

17. Letter Combinations of a Phone Number电话号码的字母组合Python_第1张图片

 Input: '22'

Ouput: ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']

Clue: 建立字典,然后迭代。

迭代:需要一个当前进行操作的数字和接下来需要操作的数字。

17. Letter Combinations of a Phone Number电话号码的字母组合Python_第2张图片

{def dd(cur,next):

     if next:

         for i in dic[next[0]]:

                 dd(cur+i), next[1:])

      else: res.append(cur)}

cur ''      
next 23      
i abc     bc
cur a a a b
next 3 3 3 3
i def ef f def
cur ad ae af bd
next [] [] [] []

以'23'为例一共迭代了3次。第三次next为空,所以直接将结果添加到res里面

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        dic={'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']}
        res=[]

        def combine(cur,next):
            if next:
                for _ in dic[next[0]]:
                    combine(cur+_,next[1:])
            else:
                res.append(cur)
        if digits:
            combine('', digits)
        return res

时间复杂度: O(3^i+4^j),i为digits里面除了79以外的数字的个数,j为79的个数。

你可能感兴趣的:(python,leetcode)