Problem
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example
Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Solution
medium level의 문제의 난이도가 생각보다 변동폭이 큰 것 같다. 이 문제도 easy에 가까운 난이도의 문제라 상대적으로 쉽게 풀 수 있다.
일단 입력 숫자의 길이를 모르기 때문에 숫자를 문자로 변환하면 이전 결과에 계속 붙여가는 형태로 만들어야 한다. 이를 위해서 recursive 함수 호출로 할 수도 있지만, for 문을 이용해서 결과를 계속 업데이트 하는 형태로 풀었다.
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
digit2letter = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}
ret = []
for i, d in enumerate(digits):
# 숫자를 문자로 변환
letter = digit2letter[d]
# 결과값이 최종 문자열만을 가지고 있어야 하기 때문에
# 현재 상태의 문자열을 저장한 후에 최종 결과 리스트로 바꿔 준다.
temp = []
for ch in letter:
# 가장 최조의 문자열은 이전 결과값이 없기 때문에 그대로 리스트에 넣어준다.
if len(ret) == 0:
temp.append(ch)
else:
# 이전 문자열에 현재의 문자를 concatenate하는 형태로 만든 후에 리스트에 저장
for combination in ret:
temp.append(combination+ch)
# 현재 만들어진 문자열 리스트를 결과값으로 업데이트 한다.
ret = temp
return ret
'코드 이야기' 카테고리의 다른 글
[LeetCode] String to Integer (atoi) - medium level (0) | 2019.07.18 |
---|---|
[LeetCode] Add Two Numbers - medium level (0) | 2019.07.15 |
facebook 메신저 봇 사용하기 (0) | 2016.06.18 |
Thrift Server를 이용하여 PHP로 자바 어플리케이션 사용하기 (0) | 2012.02.17 |
java application에 jetty server embedding하기 (0) | 2012.02.17 |