Phone number combinations
// This is a sandbox to experiment with CoderPad's execution capabilities.
// It's a temporary, throw-away session only visible to you.
import java.io.*;
import java.util.*;
/*
* To execute Java, please define "static void main" on a class
* named Solution.
*
* If you need more classes, simply define them inline.
*/
class Solution {
List<List<Character>> keypad = Arrays.asList(
Arrays.asList(),
Arrays.asList(),
Arrays.asList('A','B','C'),
Arrays.asList('D','E','F'),
Arrays.asList('G','H','I'),
Arrays.asList( 'J', 'K', 'L' ),
Arrays.asList( 'M', 'N', 'O' ),
Arrays.asList( 'P', 'Q', 'R', 'S'),
Arrays.asList( 'T', 'U', 'V' ),
Arrays.asList( 'W', 'X', 'Y', 'Z')
);
public static void main(String[] args) {
Solution solution =new Solution();
String[] input = {
null,
"",
"234",
"9583"
};
for(int i=0;i< input.length;i++) {
System.out.println("Input: " + input[i] +
", Result: " + solution.phoneCombinations(input[i]));
}
}
public Set<String> phoneCombinations(String input){
Set<String> result = new HashSet<>();
if(input == null || input.length() < 1) {
return result;
}
phoneCombinations(input, "", result, input.length()-1);
return result;
}
private void phoneCombinations(String input, String temp, Set<String> result, int index) {
if(index < 0) {
result.add(temp);
return;
}
char charDigit = input.charAt(index);
int digit = charDigit - '0';
List<Character> current = keypad.get(digit);
if(current.size() ==0 ) {
phoneCombinations(input, charDigit + temp, result, index -1);
} else {
for(int i=0; i< current.size(); i++){
phoneCombinations(input, current.get(i) + temp, result, index -1);
}
}
}
}