본문 바로가기
🖥️ 문제 풀이/리트코드(Leetcode)

[LeetCode 해석 및 풀이] 17. Letter Combinations of a Phone Number(전화번호의 문자 조합)

by 뒬탕 2024. 9. 17.
반응형

LeetCode 문제 해석 및 풀이 방법

문제 17. 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.

 

 

한글

2-9 까지의 숫자를 포함하는 문자열이 주어지면 숫자가 나타낼 수 있는 모든 가능한 문자 조합 을 반환합니다. 어떤 순서 로든 답을 반환합니다.

 

숫자에서 문자로의 매핑(전화기 버튼과 마찬가지로)은 사진과 같습니다. 1은 어떤 문자에도 매핑되지 않는다는 점에 유의하세요.

 

제한조건

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

 

입출력 예

입력 출력
digits = "23" ["ad","ae","af","bd","be","bf","cd","ce","cf"]
digits = "" []
digits = "2" ["a","b","c"]

 

해답 및 해설

파이썬 (Python)

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits) == 0:
            return []

        elif len(digits) == 1:
            num = int(digits)
            return ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'][num-2]

        last_output = self.letterCombinations(digits[:-1])
        new_char = self.letterCombinations(digits[-1])
        output = []

        for last in last_output:
            for char in new_char:
                output.append(last+char)
        
        return output

내가 처음에 푼 풀이

 

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        res = []
        digitToChar = {
            "2": "abc",
            "3": "def",
            "4": "ghi",
            "5": "jkl",
            "6": "mno",
            "7": "qprs",
            "8": "tuv",
            "9": "wxyz",
        }

        def backtrack(i, curStr):
            if len(curStr) == len(digits):
                res.append(curStr)
                return
            for c in digitToChar[digits[i]]:
                backtrack(i + 1, curStr + c)

        if digits:
            backtrack(0, "")

        return res

neetcode 로드맵에서의 풀이도 신기해서 가져와봤다.

반응형

댓글