问题
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
例子
思路
- 回溯
代码
class Solution {
public List<String> letterCombinations(String digits) {
Map<Character, 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");
List<String> list = new ArrayList<>();
if(digits.length()==0) return list;
get(digits,list,map,new StringBuilder(),0);
return list;
}
public void get(String digits,List<String> list, Map<Character,String> map, StringBuilder sb, int start){
if(start==digits.length()) list.add(sb.toString());
else{
char c = digits.charAt(start);
String s = map.get(c);
//如果数为2,则有map.get('2')种选择
for(int i=0; i<s.length(); i++) {
sb.append(s.charAt(i));
get(digits,list,map,sb,start+1);
sb.deleteCharAt(sb.length()-1);
}
}
}
}