옛날 피처폰에 숫자위치에 있는 알파벳들의 가능한 조합을 모두 출력하는 문제이다.
이런 조합의 문제에서는 재귀호출을 통해서 쉽게 해결할 수 있다.
재귀 함수를 작성할 때 중요한 포인트는 언제 함수가 종료되는지 잘 명시하는 것이다. digits의 길이가 0이 되면 비어있는 리스트를 리턴하고, 1이라면 map에서 조회하여 리턴한다.
이외의 경우에는 첫번째 숫자와 나머지 문자를 이어서 정답에 추가하여 리턴한다.
class Solution {
Map<String, List<String>> map = new HashMap<>();
{
map.put("2", List.of("a", "b", "c"));
map.put("3", List.of("d", "e", "f"));
map.put("4", List.of("g", "h", "i"));
map.put("5", List.of("j", "k", "l"));
map.put("6", List.of("m", "n", "o"));
map.put("7", List.of("p", "q", "r", "s"));
map.put("8", List.of("t", "u", "v"));
map.put("9", List.of("w", "x", "y", "z"));
}
public List<String> letterCombinations(String digits) {
List<String> answer = new ArrayList<>();
if (digits.length() == 0) {
return answer;
} else if (digits.length() == 1) {
return map.get(digits);
}
String digit = digits.substring(0, 1);
List<String> str = this.map.get(digit);
List<String> rightStr = letterCombinations(digits.substring(1));
for (int i = 0; i < str.size(); i++) {
String s = str.get(i);
for (int j = 0; j < rightStr.size(); j++) {
String rs = rightStr.get(j);
answer.add(s + rs);
}
}
return answer;
}
}
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] LeetCode 20번 Valid Parentheses (0) | 2021.09.27 |
---|---|
[Java] LeetCode 19번 Remove Nth Node From End of List (0) | 2021.09.26 |
[Java] LeetCode 15번 3Sum (0) | 2021.09.26 |
[Java] LeetCode 11번 Container With Most Water (0) | 2021.09.26 |
[Java] LeetCode 10번 Regular Expression Matching (0) | 2021.09.26 |