题目
按电话上数字与字母的对应关系,如2={a,b,c},3={d,e,f}等,给定一串数字如267,则求出abc,mno,qprs的所有组合,如amq,amp...cor,cos等
思路
遍历都可以用回溯的方式尝试解决,每次遍历结束后,将上一层元素删除,满足长度,则加入到结果中
public List<String> letterCombinations(String digits){
List<String> combinations = new ArrayList<>();
if(digits.length()==0){
return combinations;
}
Map<Character,String> digitLetterMap = new HashMap<>(){{
put('2',"abc");
put('3',"def");
put('4',"ghi");
put('5',"jkl");
put('6',"mno");
put('7',"qprs");
put('8',"tuv");
put('9',"wxyz");
}};
backtrack(combinations,digitLetterMap,digits,0,new StringBuffer());
return combinations;
}
public void backtrack(List<String> combinations,
Map<Character,String> digitLetterMap,
String digits,
int index,StringBuffer combination){
if(index == digit.legnth()){
combinations.add(combination.toString());
}else{
char digit = digits.charAt(index);
String letters = digitLetterMap.get(digit);
int letterCount = letters.legnth();
for(int i=0;i<letterCount;i++){
combination.append(letters.charAt(i));
backtrack(combinations,digitLetterMap,digits,index+1,combination);
combination.deleteCharAt(index);
}
}
}
文章来源地址https://www.toymoban.com/news/detail-815301.html
文章来源:https://www.toymoban.com/news/detail-815301.html
到了这里,关于电话号码的字母组合-算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!