public class Solution {
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList<String>();
if (digits == null || digits.length() == 0) {
return result;
}
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "");
map.put(2, "abc");
map.put(3, "def");
map.put(4, "ghi");
map.put(5, "jkl");
map.put(6, "mno");
map.put(7, "pqrs");
map.put(8, "tuv");
map.put(9, "wxyz");
map.put(0, "");
List<Character> chArray = new ArrayList<Character>();
myLetterCombinations(digits, chArray, result, map);
return result;
}
private void myLetterCombinations(String s, List<Character> arr,
List<String> result, Map<Integer, String> map) {
if (s.length() == 0) {
char[] ch = new char[arr.size()];
for (int i = 0; i < arr.size(); i++) {
ch[i] = arr.get(i);
}
result.add(String.valueOf(ch));
return;
}
int bit = Integer.valueOf(s.substring(0, 1));
String letters = map.get(bit);
for (int i = 0; i < letters.length(); i++) {
arr.add(letters.charAt(i));
myLetterCombinations(s.substring(1), arr, result, map);
arr.remove(arr.size() - 1);
}
}
}