import java.util.ArrayList;
public class Solution {
public int[] count;
public char[] letter;
ArrayList<String> ret;
public ArrayList<String> letterCombinations(String digits) {
// Start typing your Java solution below
// DO NOT write main() function
if(digits.length()==0){
ret =new ArrayList<String>();
String ans = new String();
ret.add(ans);
return ret;
}
count = new int[10];
letter = new char[10];
ret = new ArrayList<String>();
int len = digits.length();
count[2]=count[3]=count[4]=count[5]=count[6]=count[8]=3;
count[7]=count[9]=4;
letter[2]='a';letter[3]='d';letter[4]='g';
letter[5]='j';letter[6]='m';letter[7]='p';
letter[8]='t';letter[9]='w';
dfs(0,len-1,digits,new StringBuilder());
return ret;
}
private void dfs(int levelnow,int levelfinal,String digits,StringBuilder sb){
int index = (int)(digits.charAt(levelnow) - '0');
if(levelnow==levelfinal){
for(int i=0;i<count[index];i++){
char now = (char)(letter[index]+i);
String ans = new String(sb.append(now));
ret.add(ans);
sb.deleteCharAt(sb.length() - 1);
}
}
else{
for(int i=0;i<count[index];i++){
char now = (char)(letter[index]+i);
sb.append(now);
dfs(levelnow+1,levelfinal,digits,sb);
sb.deleteCharAt(sb.length() - 1);
}
}
}
public static void main(String[] args){
Solution s = new Solution();
System.out.println(s.letterCombinations("23"));
}
}