m1ndy5's coding blog

LeetCode 17. Letter Combinations of a Phone Number with Python 본문

알고리즘 with python/알고리즘 스터디

LeetCode 17. Letter Combinations of a Phone Number with Python

정민됴 2024. 1. 10. 09:57

https://leetcode.com/problems/letter-combinations-of-a-phone-number/

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']}
        if digits == "":
            return []

        key = digits[0]

        # key를 2, 23, 235 이런식으로 붙여서 다시 dic에 저장
        for i in range(1, len(digits)):
            values = []
            for a1 in dic[key]:
                for a2 in dic[digits[i]]:
                    values.append(a1+a2)
            key += digits[i]
            dic[key] = values

        return dic[key]

책코드

def letterCombinations(self, digits):

    # digits의 자리수만큼 가능한 조합 다찾기
    def dfs(index, path):
        if len(path) == len(digits):
            result.append(path)
            return

        for i in range(idex, len(digits)):
            for j in dic[digits[i]]:
                dfs(i+1, path+j)


    if not digits:
        return []

    dic = {"2" :"abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7":"pqrs", "8":"tuv", "9": "wxyxz"}
    result = []
    dfs(0, "")

    return result