My java solution.
The basic idea is to have a helper function to get the corresponding characters for each digit; then use for-loops to get the combinations
public class Solution {
// have a helper function to get all the corresponding letters, and then combine the result togeter by StringBuffer.
public List<String> letterCombinations(String digits) {
List<String> res = new ArrayList<String>();
if(digits ==null ||digits.length()==0) return res;
for(int i=0;i<digits.length();i++){
List<Character> resChars=getChars(digits.charAt(i));
if(res.size()==0){
for(int j =0;j<resChars.size();j++){
res.add(resChars.get(j)+"");
}
}else{
List<String> restmp = new ArrayList<String>();
for(int p =0;p<res.size();p++){
for(int q =0;q<resChars.size();q++){
restmp.add(res.get(p)+resChars.get(q));
}
}
res=restmp;
}
}
return res;
}
List<Character> getChars(char digit){
List<Character> res = new ArrayList<Character>();
switch(digit){
case '2': res.add('a');res.add('b');res.add('c');break;
case '3': res.add('d');res.add('e');res.add('f');break;
case '4': res.add('g');res.add('h');res.add('i');break;
case '5': res.add('j');res.add('k');res.add('l');break;
case '6': res.add('m');res.add('n');res.add('o');break;
case '7': res.add('p');res.add('q');res.add('r');res.add('s');break;
case '8': res.add('t');res.add('u');res.add('v');break;
case '9': res.add('w');res.add('x');res.add('y');res.add('z');break;
default:break;
}
return res;
}
}
没有评论:
发表评论