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

digitsi 是范围 '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. 黄金矿工

相关推荐
小羊没烦恼!12 小时前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特12 小时前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里12 小时前
java中的继承和多态的区别
java
小羊没烦恼!12 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕12 小时前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码13 小时前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖13 小时前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时13 小时前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读13 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼14 小时前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习