Leetcode Python - 17. Letter Combinations of a Phone Number

Leetcode #17 - Letter Combinations of a Phone Number

이번에는 특정 챕터별로 문제들을 풀어보겠습니다. string을 집중적으로 풀어보겠습니다.

리트코드의 문제 17 ‘Letter Combinations of a Phone Number’을 파이썬으로 풀어 보도록 하겠습니다.

포인트는 dfs를 이용해 recursion하게 풀 수 있습니다.

전체 코드는 아래와 같습니다.

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

        res = []
        self.recursion(digits, '', res)
        return res
    
    def recursion(self, digits, path, res):
        if not digits:
            res.append(path)
            return
        
        if digits[0] == '2':
            for ch in ['a','b','c']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '3':
            for ch in ['d','e','f']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '4':
            for ch in ['g','h','i']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '5':
            for ch in ['j','k','l']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '6':
            for ch in ['m','n','o']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '7':
            for ch in ['p','q','r','s']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '8':
            for ch in ['t','u','v']:
                self.recursion(digits[1:], path + ch, res)
        elif digits[0] == '9':
            for ch in ['w','x','y','z']:
                self.recursion(digits[1:], path + ch, res)

시간복잡도는

  • 평균 O(3^logn) : 한번에 3개 or 4개씩 더 곱해나가므로

공간복잡도는

  • 최악의 경우 O(3^logn) : 수행되는 모든 함수만큼 res에 더해짐