leetcode17. 电话号码的字母组合(java)

电话号码的字母组合

leetcode17. 电话号码的字母组合

难度 中等
leetcode17 跳转链接

题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例1:

输入:digits = "23"

输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例2:

输入:digits = ""

输出:[]
示例 3:

输入:digits = "2"

输出:["a","b","c"]
提示:

0 <= digits.length <= 4

digits[i] 是范围 ['2', '9'] 的一个数字。

回溯算法

对于字符串 ds 中的每一位数字,都有其对应的字母映射数组。

在 DFS 中决策每一位数字应该对应哪一个字母,当决策的位数 i == n,代表整个 ds 字符串都被决策完毕,将决策结果添加到结果集:
回溯算法流程:

1.路径:也就是已经做出的选择。

2.选择列表:也就是你当前可以做的选择。

3.结束条件:也就是到达决策树底层,无法再做选择的条件。

伪代码框架

java 复制代码
result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

代码演示

java 复制代码
class Solution {
     Map<String, String[]> map = new HashMap<>(){{
        put("2", new String[]{"a", "b", "c"});
        put("3", new String[]{"d", "e", "f"});
        put("4", new String[]{"g", "h", "i"});
        put("5", new String[]{"j", "k", "l"});
        put("6", new String[]{"m", "n", "o"});
        put("7", new String[]{"p", "q", "r", "s"});
        put("8", new String[]{"t", "u", "v"});
        put("9", new String[]{"w", "x", "y", "z"});
    }};
    ArrayList<String> ans = new ArrayList<>();
    int n;
    String _ds ;
    public List<String> letterCombinations(String ds) {
        n = ds.length();
        if (n == 0){
            return ans;
        }
        _ds = ds;
        dfs(0,new StringBuilder());
        return ans;
    }

    public void dfs(int index,StringBuilder sb){
        if (index == n){
            ans.add(sb.toString());
            return;
        }
        String key = _ds.substring(index,index + 1);
        String[] values = map.get(key);
        //选择列表
        for (String v : values){
        //做出选择
            sb.append(v);
            //回溯
            dfs(index + 1,sb);
            //撤销选择
            sb.deleteCharAt(sb.length() - 1);
        }
    }
}

回溯算法

leetcode93. 复原 IP 地址

leetcode306. 累加数

leetcode1219. 黄金矿工

相关推荐
咸鱼翻身小阿橙几秒前
QT-P3
开发语言·qt·计算机视觉
心易行者8 分钟前
代码写好了,然后呢?——手把手教你把Python脚本变成能赚钱的Web应用
开发语言·前端·python
AKA__Zas9 分钟前
初识 事务
java·开发语言·数据库·sql
kongba00711 分钟前
2026年4月19日 kimi记忆备份
java·前端·数据库
今儿敲了吗12 分钟前
常用UI组件
开发语言
AI人工智能+电脑小能手13 分钟前
【大白话说Java面试题】【Java基础篇】01_说说ArrayList的底层原理/扩容规则
java·后端·面试·list
发发就是发14 分钟前
USB系统架构概述:从一次诡异的枚举失败说起
驱动开发·单片机·嵌入式硬件·算法·fpga开发
笨鸟先飞的橘猫15 分钟前
数据结构学习——跳表
数据结构·python·学习
少许极端15 分钟前
算法奇妙屋(四十七)-ST表
算法·st表·rmq
高斯林.神犇18 分钟前
六、java配置类改造ioc
java·开发语言