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()

相关推荐
栋***t13 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
wabs66613 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
CHANG_THE_WORLD13 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xexpertS13 小时前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
zy happy14 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
meng半颗糖14 小时前
3.Java流程控制语句
java·开发语言·intellij-idea
大模型码小白15 小时前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
用户61691822999315 小时前
记录一次死锁检测
java
jvmind_dev15 小时前
1c1g 容器莫名 OOM Killed?排查 Metaspace 持续增长与脚本引擎的坑
java·后端