Given a digit string, return all possible letter combinations that the 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 answer could be in any order you want.
public class Solution {
public ArrayList<String> letterCombinations(String digits) {
// Start typing your Java solution below
// DO NOT write main() function
String [] strList = {" ","", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
ArrayList<String> res = new ArrayList<String>();
res.add("");
if(digits.length() <1)
return res;
for(int i=0; i<digits.length(); i++){
int digit = Character.getNumericValue(digits.charAt(i));
String str = strList[digit];
ArrayList<String> tmpList = new ArrayList<String>();
for(String oldStr:res){
for(int j=0; j<str.length(); j++){
String newStr = oldStr+str.charAt(j);
tmpList.add(newStr);
}
}
res = tmpList;
}
return res;
}
}
------------------------------------------------------------------------------------------------------------------------------------------
LL's solution:
public static ArrayList<String> letterCombinations(String digits) {
String[] strlist = {" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
ArrayList<String> res = new ArrayList<String>();
int len = digits.length();
if(len<1)
return res;
res.add("");
for(int i = 0; i<len; i++){
int num = Character.getNumericValue(digits.charAt(i));
String appendix = strlist[num];
ArrayList<String> tmp = new ArrayList<String>();
for(String pre:res){
for(int j= 0; j<appendix.length();j++){
tmp.add(pre+appendix.charAt(j));
}
}
res = tmp;
}
return res;
}