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. 黄金矿工

相关推荐
それども4 分钟前
@ModelAttribute vs @RequestBody
java
小郭团队24 分钟前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称33 分钟前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
雨中飘荡的记忆40 分钟前
深度详解Spring Context
java·spring
Tao____44 分钟前
JAVA开源物联网平台
java·物联网·mqtt·开源·ruoyi
Deepoch1 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
Lhuu(重开版1 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
yqd6661 小时前
SpringSecurity的使用
java·spring
-To be number.wan1 小时前
【数据结构真题解析】哈希表中等难度挑战:冲突处理与查找效率深度剖析
数据结构·哈希算法
csdn_aspnet1 小时前
C 语言的优雅回归:从零手造数据结构
c语言·数据结构