public List<String> letterCombinations(String digits) {
LinkedList<String> res = new LinkedList<>();
if (digits == null || digits.isEmpty())
return res;
char[][] tab = {{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'},
{'j', 'k', 'l'}, {'m', 'n', 'o'}, {'p', 'q', 'r', 's'},
{'t', 'u', 'v'}, {'w', 'x', 'y', 'z'}};
res.add("");
while(res.peek().length() != digits.length()){
String remove = res.poll();
char[] chars = tab[digits.charAt(remove.length()) - '2'];
for(int i=0;i<chars.length;i++){
res.add(remove+chars[i]);
}
}
return res;
}
LinkedList<String> res = new LinkedList<>();
char[][] tab = {{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'},
{'j', 'k', 'l'}, {'m', 'n', 'o'}, {'p', 'q', 'r', 's'},
{'t', 'u', 'v'}, {'w', 'x', 'y', 'z'}};
String digits;
public List<String> letterCombinations(String digits) {
if (digits == null || digits.isEmpty())return res;
this.digits = digits;
dfs("");
return res;
}
public void dfs(String str){
if(str.length() == digits.length()){
res.add(str);
return;
}
char[] chars = tab[digits.charAt(str.length()) - '2'];
for(int i=0;i<chars.length;i++){
dfs(str+chars[i]);
}
}