Programming/leetcode

17. Letter Combinations of a Phone Number

홍열 2021. 2. 24. 21:24
728x90

dfs-재귀를 이용한 문제,

 

전화 패드의 숫자를 돌려가면서 출력하는 문제

'2':"abc", '3':"def"가 있고 "23"이면 "ad", "ae", "af"...으로 모두 출력하는 문제

 

끝 조건에서 결과를 append해주면 된다. 

 

맨처음 dfs의 조건을 어떻게 줘야하나 고민했다. 

재귀를 돌리는데, 처음은 뺄수 없어서 0을 줬다.

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

        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']}
        
        def dfs(index, path):
            if len(path) == len(digits):
                result.append(path)
                return

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

        result = []
        dfs(0, "")
        return result