[leetcode] 17. Letter Combinations of a Phone Number

2023. 1. 3. 10:38노트/Algorithm : 알고리즘

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"]

 

Constraints:

  • 0 <= digits.length <= 4
  • digits[i] is a digit in the range ['2', '9'].

 

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        def dfs(index, path):
            # 끝까지 탐색하면 백트레킹 
            if len(path) == len(digits): 
                result.append(path)
            for i in range(index, 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": "wxyz"}
        result = [] 
        dfs(0, "")
        
        return result