LeetCode17 电话号码的字母组合

已经AC,Python语言描述

思路:

  • 为2~9的电话号码建立哈希表,队列result 初始存放输入的数字字符串首位数字对应的字母列表,如:result=[' a', ' b', ' c' ]
  • 队列弹出后与数字字符串的下一位数字对应的字母列表逐个拼接后在入队

 

这里有个小的需要注意的地方,就是Python的拷贝、‘=’ 引用的区别。因为没有注意到这个问题,当数字字符串里有相同字符时一直提示超出内存限制,需要注意。下面是代码

# -------------电话号码的字母组合---------------
from copy import copy
class Solution17(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        num_alphabet = {'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 len(digits)==0 or '1' in digits:
            return []
        elif len(digits)==1:
            return num_alphabet[digits]
        else:
            result = copy(num_alphabet[digits[0]])
            k = len(num_alphabet[digits[0]])
            for num in digits[1:]:
                i = 1
                while i<=k:
                    item = result.pop(0)
                    for s in num_alphabet[num]:
                        tmp = copy(item)
                        result.append(tmp+s)
                    i+=1
                k *=len(num_alphabet[num])
            return result

 

你可能感兴趣的:(算法,LeetCode,数据结构)