https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
思路:DFS、回溯(没有剪枝,解空间即为答案)
改进:字符串相加可以使用StringBuffer。
class Solution {
//两个大括号的方式初始化(本质上是匿名内部类 + 实例化代码块儿)
Map<String,String> hashMap=new HashMap<String,String>(){{
put("2","abc");
put("3","def");
put("4","ghi");
put("5","jkl");
put("6","mno");
put("7","pqrs");
put("8","tuv");
put("9","wxyz");
}};
public List<String> letterCombinations(String digits) {
List<String> list=new ArrayList<String>();
if(digits.length()<1||digits==null) return list;
String str=String.valueOf(digits.charAt(0));
for(int i=0;i<hashMap.get(str).length();i++){
String s=String.valueOf(hashMap.get(str).charAt(i));
backTrace(list,s,digits,1);
}
return list;
}
//dep为深度,这里指字符的索引;s为前面映射的字符串
public void backTrace(List<String> list,String s,String digits,int dep){
if(digits.length()==dep){
list.add(s);
return;
}
String str=String.valueOf(digits.charAt(dep));
for(int i=0;i<hashMap.get(str).length();i++){
String s1=s+String.valueOf(hashMap.get(str).charAt(i));
backTrace(list,s1,digits,dep+1);
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!