问题描述(原题链接)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
代码:
class Solution {
public List<String> letterCombinations(String digits) {
int length = digits.length();
if(length==0)
return new ArrayList<String>();
List<String> list = new ArrayList<String>();
HashMap<Character,String> hashMap = new HashMap<Character,String>();
hashMap.put('2', "abc");
hashMap.put('3', "def");
hashMap.put('4', "ghi");
hashMap.put('5', "jkl");
hashMap.put('6', "mno");
hashMap.put('7', "pqrs");
hashMap.put('8', "tuv");
hashMap.put('9', "wxyz");
back(list,digits,hashMap,0,new StringBuffer());
return list;
}
private void back(List<String> list,String digits,HashMap<Character,String> hashMap,int index,StringBuffer strTemp){
if(index==digits.length()){
list.add(strTemp.toString());
}else{
String str = hashMap.get(digits.charAt(index));//获得一个字符串
int len =str.length();
for(int i =0;i<len;i++){
strTemp.append(str.charAt(i));
back(list,digits,hashMap,index+1,strTemp);
strTemp.deleteCharAt(index);
}
}
}
}