电话号码的字母组合-算法

题目

按电话上数字与字母的对应关系,如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);        
        }
    }
    
}
相关推荐
怕浪猫1 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i2 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J3 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
weixin_307779134 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
朝朝辞暮i5 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i5 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
Godspeed Zhao5 小时前
现代智能雷达技术14——算法(0)
线性代数·算法·雷达
可乐ea6 小时前
Agent 模型分级升级路由:用置信度阈值把贵模型省下来
人工智能·算法·机器学习·结构化输出·置信度路由·模型升级路由·大模型成本优化
Navigator_Z6 小时前
LeetCode //C - 1278. Palindrome Partitioning III
c语言·算法·leetcode
Godspeed Zhao6 小时前
现代智能雷达技术18——算法(4)
算法