Given a digit string, return all possible letter combinations thatthe number could represent.
A mapping of digit to letters (just like on the telephone buttons)is given below.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answercould be in any order you want.
2014.8.9 update:
public ListletterCombinations(String digits) {
String[] NUM_LET = {"", "", "abc", "def", "ghi","jkl", "mno", "pqrs", "tuv", "wxyz"};
List result = new ArrayList();
if (digits.isEmpty()) {
result.add("");
returnresult;
}
List lastComb =letterCombinations(digits.substring(1));
int curNum = digits.charAt(0) - '0';
String curStr = NUM_LET[curNum];
for (String last : lastComb) {
for (int i= 0; i < curStr.length(); i++) {
result.add(curStr.charAt(i) +last);
}
}
return result;
}
2013:
// phone number, recursion
public class Solution {
public ArrayListletterCombinations(String digits) {
if (digits == null) {
return newArrayList();
}
String[] letters = {"", "", "abc", "def", "ghi","jkl", "mno", "pqrs",
"tuv", "wxyz"};
return helper(digits.length() - 1, letters,digits);
}
ArrayList helper (intindex, String[] letters, String digits) {
ArrayList result = new ArrayList();
if (index == -1) {
result.add("");
returnresult;
}
int num = digits.charAt(index) - '0';
String curString = letters[num];
ArrayList oldList = helper(index-1, letters,digits);
for (String oldString : oldList) {
for (int i= 0; i < curString.length(); i++) {
result.add(oldString +curString.charAt(i));
}
}
return result;
}
}
2013
// phone number, iteration
public class Solution {
public ArrayListletterCombinations(String digits) {
if (digits == null) {
return newArrayList();
}
String[] letters = {"", "", "abc", "def", "ghi","jkl", "mno", "pqrs",
"tuv", "wxyz"};
ArrayList result = new ArrayList();
ArrayList oldList = new ArrayList();
oldList.add("");
for (int index = 0; index < digits.length();index++) {
int num =digits.charAt(index) - '0';
StringcurString = letters[num];
ArrayListnewList = new ArrayList();
for(String oldString : oldList) {
for (int i = 0; i <curString.length(); i++) {
newList.add(oldString +curString.charAt(i));
}
}
oldList.clear();
oldList.addAll(newList);
}
return oldList;
}
}