(Python, Java) 리트코드 - Letter Combinations of a Phone Number
[문제 링크]
Python 풀이
from typing import List
from itertools import product
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if len(digits) == 0:
return []
phone = {"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"]
}
ls = []
for num in digits:
ls.append(phone.get(num))
answer=[]
for letters in product(*ls):
answer.append(''.join(letters))
return answer
Java 풀이
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
class Solution {
List<String> answer = new ArrayList<>();
Map<Character, String> letters = Map.of(
'2', "abc", '3', "def", '4', "ghi", '5', "jkl",
'6', "mno", '7', "pqrs", '8', "tuv", '9', "wxyz");
public List<String> letterCombinations(String digits) {
if (digits.length() == 0)
return answer;
dfs(digits, 0, "");
return answer;
}
private void dfs(String digits, int idx, String result) {
if (digits.length() == idx) {
answer.add(result);
return;
}
for (char letter : letters.get(digits.charAt(idx)).toCharArray()) {
dfs(digits, idx + 1, result + letter);
}
}
}
파이썬으로는 쉽게 풀었지만 자바로는 항상 순열, 조합 문제는 어려운 것 같다.