17. 电话号码的字母组合(回溯)

从第一个数字开始遍历其对应的字母,将其加入StringBuffer中,继续深度优先搜索,当访问到最后一个数字的时候,将StringBuffer存储到ans中,然后回溯到下一个对应字母。

java 复制代码
class Solution {
    public List<String> letterCombinations(String digits) {
        List<String> ans = new ArrayList<>();
        if (digits.length() == 0) return ans;
        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");
            }
        };
        backtrack(ans, digits, map, 0, new StringBuffer());
        return ans;
    }
    public void backtrack(List<String> ans, String digits, Map<Character, String> map, int index, StringBuffer sb) {
        if (index == digits.length()) ans.add(sb.toString());
        else {
            char ch = digits.charAt(index);
            String letters = map.get(ch);
            for (int i = 0; i < letters.length(); ++i) {
                sb.append(letters.charAt(i));
                backtrack(ans, digits, map, index + 1, sb);
                sb.deleteCharAt(index);
            }
        }
    }
}

拓展:

StringBuffer中的删除对应字符的方法是deleteCharAt()

相关推荐
AAA修煤气灶刘哥几秒前
微服务又崩了?5 招 + Sentinel 救场,后端小白也能学会
java·后端·spring cloud
渣哥37 分钟前
90% 的 Java 初学者都搞不懂的 List、Set、Map 区别
java
何中应1 小时前
Spring Boot单体项目整合Nacos
java·spring boot·后端
楼田莉子1 小时前
C++算法学习专题:前缀和
c++·学习·算法·leetcode·蓝桥杯
Jooolin1 小时前
【C++】C++11出来之后,到目前为止官方都做了些什么更新?
数据结构·c++·ai编程
data myth1 小时前
洛谷p2392kkksc03考前临时抱佛脚 详解(回溯,深度搜索法)
算法
PPIO派欧云1 小时前
从套壳生态到上下文工程:一文看懂2025年Agent六大最新趋势
算法
dylan_QAQ1 小时前
Java转Go全过程01-基础语法部分
java·后端·go
Ka1Yan1 小时前
[算法] 双指针:本质是“分治思维“——从基础原理到实战的深度解析
java·开发语言·数据结构·算法·面试
freexyn2 小时前
Matlab自学笔记六十六:求解带参数的不等式
算法·matlab·参数方程·编程实例·解不等式