【算法三十三】17. 电话号码的字母组合

17. 电话号码的字母组合

回溯:

java 复制代码
class Solution {
    public List<String> letterCombinations(String digits) {
        List<String> ans = new ArrayList<>();
        if(digits.length() == 0){
            return ans;
        }
        Map<Character,String> hashmap = Map.of(
            '2',"abc",
            '3',"def",
            '4',"ghi",
            '5',"jkl",
            '6',"mno",
            '7',"pqrs",
            '8',"tuv",
            '9',"wxyz"
        );
        StringBuffer sb = new StringBuffer();
        backtrack(ans,hashmap,digits,0,sb);
        return ans;
    }

    public void backtrack(List<String> ans,Map<Character,String> hashmap,String digits,int index,StringBuffer sb){
        if(index == digits.length()){
            ans.add(sb.toString());
        }
        else{
            char digit = digits.charAt(index);
            String letters = hashmap.get(digit);
            for(int i = 0;i<letters.length();i++){
                sb.append(letters.charAt(i));
                backtrack(ans,hashmap,digits,index+1,sb);
                sb.deleteCharAt(index);
            }
        }
    }
}

时间复杂度:O(3^m×4^n)

空间复杂度:O(m+n)

相关推荐
Dlrb12111 天前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy1 天前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy1 天前
【算法四十七】152. 乘积最大子数组
算法
淘矿人1 天前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar1 天前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
落羽的落羽1 天前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈1 天前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
Godspeed Zhao1 天前
从零开始学AI16——SVM
算法·机器学习·支持向量机
江屿风1 天前
C++OJ题经验总结(竞赛)1
开发语言·c++·笔记·算法