LeetCode17—电话号码的字母组合(java版)
作者:互联网
题目描述:
标签:深度优先搜索 递归 字符串 回溯算法
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
代码:
1、首先要建立map,找到数字2-9到字符串的映射。
2、递归结束条件,index == digits.length()
3、从左到右遍历,找到index指向数字映射的字符串长度
4、从上到下遍历,回溯
5、回溯之后需清理index对应下的字符!
注意:StringBuffer的两个方法:append()在字符串尾部添加字符,deleteCharAt(index)删除index对应位置上的字符
创建map和初始化的方法:Map<Character,String> map = new HashMap<>(){{
put(' '," ");
put(' '," ");
}}
class Solution {
List<String> result = new ArrayList<String>();
StringBuffer s = new StringBuffer();
Map<Character,String> map = new HashMap(){{
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) {
if(digits.length() == 0){
return result;
}
backTracing(digits,0);
return result;
}
public void backTracing(String digits,int index){
if(index == digits.length()){
result.add(s.toString());
return;
}
char digit = digits.charAt(index);
String letters = map.get(digit);
for(int i = 0;i < letters.length();i++){
s.append(letters.charAt(i));
backTracing(digits,index + 1);
s.deleteCharAt(index);
}
}
}
标签:digits,index,java,map,put,result,LeetCode17,字母组合,new 来源: https://blog.csdn.net/qq_40840749/article/details/115428974