import java.util.ArrayList;
import java.util.List;
// Letter Combinations of a Phone Number
// Given a string containing digits from 2-9,
// get all possible letter combinations that a phone number represent
class Program {
// 2 3 4 5 6 7 8 9
List<String> letters = List.of("abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz");
List<String> result = new ArrayList<>();
void print(List<String> lst) {
for (String n : lst) {
System.out.print(n + " ");
}
}
void createCombinations(String digits, String output, int di) {
if (digits.length() == di) {
result.add(output);
return;
}
for (int i = 0; i < letters.get(digits.charAt(di) - '2').length(); i++) {
// '2' for letters index. 2->0 3->1 ('2' - 48('0') = 2 - 2 = 0 (index 0)
output += letters.get(digits.charAt(di) - '2').charAt(i);
createCombinations(digits, output, di + 1);
output = output.substring(0, output.length() - 1);
}
}
List<String> letterCombinationsOfPhoneNumber(String digits) {
if (digits.equals("")) {
return result;
}
String output = "";
createCombinations(digits, output, 0);
return result;
}
public static void main(String[] args) {
Program p = new Program();
List<String> result = p.letterCombinationsOfPhoneNumber("23");
p.print(result);
}
}
/*
run:
ad ae af bd be bf cd ce cf
*/