题目
代码
这里以“22”为例讲解
class Solution {
List<String> res = new LinkedList<String>();
public List<String> letterCombinations(String digits) {
if(digits==null || digits.length()==0) return new ArrayList();
Map<Character,String> map = new HashMap<Character,String>();
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
dfs("",digits,0,map);
return res;
}
public void dfs(String s,String digits,int start,Map<Character,String> map){
if(start == digits.length()) {
res.add(s);
return;
}
String letters = map.get(digits.charAt(start));
for (int j=0;j<letters.length();j++){
dfs(s+letters.charAt(j),digits,start+1,map);
}
}
}
队列法
class Solution {
public List<String> letterCombinations(String digits) {
LinkedList<String> ans = new LinkedList();
if(digits.length()==0) return ans;
String[] strs = { "0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
ans.add("");
for(int i = 0;i<digits.length();i++){
int num = digits.charAt(i)-'0';
while(ans.peek().length() == i) {
String str = ans.remove();
for(char s: strs[num].toCharArray()){
ans.add(str+s);
}
}
}return ans;
}
}