描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
```
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;
class Solution {
public List<String> letterCombinations(String digits) {
HashMap<Integer,String> map = new HashMap<>();
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");
LinkedList<Character> temp = new LinkedList<>();
List<String> res = new ArrayList<>();
if(digits==null || digits.length()==0)
return res;
dfs(map,digits,0,res,temp);
return res;
}
private void dfs(HashMap<Integer,String> map, String digits, int index, List<String> res, LinkedList<Character> temp) {
if(index>digits.length()-1) {
StringBuffer s = new StringBuffer();
for(int i=0;i<temp.size();i++) {
s.append(temp.get(i));
}
res.add(s.toString());
return;
}
int n = digits.charAt(index)-'0';
String str = map.get(n);
for(int i=0;i<str.length();i++) {
temp.add(str.charAt(i));
dfs(map,digits,index+1,res,temp);
temp.pollLast();
}
}
}
```
网友评论