Skip to content

Commit 1fec794

Browse files
committed
Added task 17.
1 parent 51a5bbd commit 1fec794

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package s0017.letter.combinations.of.a.phone.number;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
public class Solution {
8+
public List<String> letterCombinations(String digits) {
9+
if (digits.isEmpty()) return Collections.emptyList();
10+
List<String> words = new ArrayList<>();
11+
char[] word = new char[digits.length()];
12+
helper(digits, word, 0, words);
13+
return words;
14+
}
15+
16+
private void helper(String digits, char[] word, int cur, List<String> words) {
17+
if (cur == digits.length()) {
18+
words.add(new String(word));
19+
} else {
20+
for (char ch : charsForDigit(digits.charAt(cur))) {
21+
word[cur] = ch;
22+
helper(digits, word, cur + 1, words);
23+
}
24+
}
25+
}
26+
27+
private char[] charsForDigit(char digit) {
28+
switch (digit) {
29+
case '2':
30+
return new char[] {'a', 'b', 'c'};
31+
case '3':
32+
return new char[] {'d', 'e', 'f'};
33+
case '4':
34+
return new char[] {'g', 'h', 'i'};
35+
case '5':
36+
return new char[] {'j', 'k', 'l'};
37+
case '6':
38+
return new char[] {'m', 'n', 'o'};
39+
case '7':
40+
return new char[] {'p', 'q', 'r', 's'};
41+
case '8':
42+
return new char[] {'t', 'u', 'v'};
43+
case '9':
44+
return new char[] {'w', 'x', 'y', 'z'};
45+
default:
46+
return new char[] {};
47+
}
48+
}
49+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package s0017.letter.combinations.of.a.phone.number;
2+
3+
import static org.hamcrest.CoreMatchers.equalTo;
4+
import static org.hamcrest.MatcherAssert.assertThat;
5+
6+
import org.junit.Test;
7+
8+
public class SolutionTest {
9+
@Test
10+
public void letterCombinations() {
11+
assertThat(
12+
new Solution().letterCombinations("23").toString(),
13+
equalTo("[ad, ae, af, bd, be, bf, cd, ce, cf]"));
14+
}
15+
}

0 commit comments

Comments
 (0)