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

相关推荐
噢,我明白了10 小时前
表单的完整 CRUD 练习【极简个人记账本】(含前端后端链接mySQL)
java·前端·数据库·mysql
AI机器学习算法10 小时前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
通往曙光的路上10 小时前
mysql1
java
Tigshop开源商城15 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
坚果派·白晓明16 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
花间相见16 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
X journey16 小时前
机器学习进阶(13):支持向量机SVM
算法·机器学习·支持向量机
小短腿的代码世界16 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
Tigshop开源商城17 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
洛水水17 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展