LeetCode 17電話番号のアルファベットの組み合わせ


すでにAC、Python言語で説明されています
考え方:
  • は2~9の電話番号にハッシュテーブルを確立し、キューresultは入力されたデジタル文字列の最初の数字に対応するアルファベットリストを初期に格納する.例えば、result=['a','b','c']
  • キューがポップアップすると、数字文字列の次の数字に対応するアルファベットリストが1つずつつづられ、
  • にキューに入る.
     
    ここで注意すべき点は、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