Letter Combinations of a Phone Number

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.

A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example 1:

Input: digits = "23" Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"] Example 2:

Input: digits = "" Output: [] Example 3:

Input: digits = "2" Output: ["a","b","c"]

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        answer = ['']
        lookup = {
            "2": "abc",
            "3": "def",
            "4": "ghi",
            "5": "jkl",
            "6": "mno",
            "7": "pqrs",
            "8": "tuv",
            "9": "wxyz"
        }

        for s in digits:
            if s in lookup:
                build = []
                for a in answer:
                    for letter in lookup[s]:
                        build.append(a + letter)
                answer = build

        return [a for a in answer if not a == '']


sol = Solution()

test_cases = [
    {
        "no": "one",
        "input": "234",
        "answer": ["adg", "adh", "adi", "aeg", "aeh", "aei", "afg", "afh", "afi",
                   "bdg", "bdh", "bdi", "beg", "beh", "bei", "bfg", "bfh", "bfi",
                   "cdg", "cdh", "cdi", "ceg", "ceh", "cei", "cfg", "cfh", "cfi"]
    },
    {
        "no": "two",
        "input": "",
        "answer": []
    },
    {
        "no": "three",
        "input": "2",
        "answer": ["a", "b", "c"]
    }
]

for test in test_cases:
    result = sol.letterCombinations(test["input"])
    if result == test["answer"]:
        print("answer is RIGHT")
    else:
        print("failed")