首页 > 其他分享 >【LeetCode Hot 100】17. 电话号码的字母组合

【LeetCode Hot 100】17. 电话号码的字母组合

时间:2024-09-24 19:23:15浏览次数:8  
标签:digits return combination idx res Hot 17 backtrace 字母组合

题目描述

本题需要用回溯算法遍历穷举所有可能的解。回溯算法维护一个字符串序列,记录已经有的字母排列,用一个索引值记录该字符串序列下一个将要处理的位置。每次递归将索引值加一,回溯之后将字符串序列中上次加入的字符退出序列中,枚举下一个可能的值。总的来说是一个较为基础的回溯算法题目,我们可以用这个题目来理解回溯算法的基础知识。

// C++
class Solution {
public:
    unordered_map<char, string> digit2letters = {
        {'2', "abc"}, {'3', "def"},  {'4', "ghi"}, {'5', "jkl"},
        {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};

    vector<string> result;

    void backtrace(string& digits, int idx, string& combination) {
        if (idx >= digits.length()) {
            result.push_back(combination);
            return;
        }

        string& possible = digit2letters[digits[idx]];
        for (char c : possible) {
            combination.push_back(c);
            backtrace(digits, idx + 1, combination);
            combination.pop_back();
        }
    }

    vector<string> letterCombinations(string digits) {
        if (digits.length() == 0) {
            return {};
        }

        string combination = "";
        backtrace(digits, 0, combination);
        return result;
    }
};

// Java
class Solution {
    public List<String> letterCombinations(String digits) {
        List<String> res = new ArrayList<>();
        if (digits.length() == 0) {
            return res;
        }

        Map<Character, String> map = Map.of(
            '2', "abc",
            '3', "def",
            '4', "ghi",
            '5', "jkl",
            '6', "mno",
            '7', "pqrs",
            '8', "tuv",
            '9', "wxyz"
        );

        StringBuffer combination = new StringBuffer();
        backtrace(res, map, digits, 0, combination);
        return res;
    }

    public void backtrace(List<String> res, Map<Character, String> map, String digits, int idx, StringBuffer combination) {
        if (idx >= digits.length()) {
            res.add(combination.toString());
            return;
        }

        String letters = map.get(digits.charAt(idx));
        for (int i = 0; i < letters.length(); i++) {
            combination.append(letters.charAt(i));
            backtrace(res, map, digits, idx + 1, combination);
            combination.deleteCharAt(idx);
        }
    }
}

对于个人来说,Java解法的重点在于Java标准库的使用,比如Map以及用于构建字符串的StringBuffer

标签:digits,return,combination,idx,res,Hot,17,backtrace,字母组合
From: https://www.cnblogs.com/louistang0524/p/18429843

相关文章

  • 题解:SP1741 TETRIS3D - Tetris 3D
    题意维护一个\(D\timesS\)的平面,每个点有一个高度。要求支持一个操作:查询一个矩形区域的最大值,并将该区域更新为最大值加上给定的数。分析发现\(D,S\leq10^3\),考虑使用二维线段树维护。二维线段树,顾名思义,就是在普通线段树的每一个节点上维护一棵线段树。在本题中,外层节......
  • bfs与优先队列 [NOIP2017 普及组] 棋盘————洛谷p3956
    [NOIP2017普及组]棋盘题目背景NOIP2017普及组T3题目描述有一个\(m\timesm\)的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只能向上、下、左、右......
  • 【Vulfocus】struts2-cve_2017_9791漏洞复现
    一、漏洞介绍1.靶场地址:https://vulfocus.cn/2.漏洞名称:Struts2S2-048远程命令执行漏洞3.漏洞描述:Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。攻击者构造恶意字段......
  • 3170. 删除星号以后字典序最小的字符串
    题目链接3170.删除星号以后字典序最小的字符串思路堆栈&位运算题解链接三种写法:26个栈+位运算优化(Python/Java/C++/Go)关键点1.用堆栈跟踪各个字母出现的位置2.用位运算跟踪当前最小字母(lowbit技巧)时间复杂度朴素做法:\(O(n\vert\Sigma\vert)\)位运算......
  • Centos7.9部署kubernetes(一主两从)(版本1.17.4)
    部署kubernetes1、环境准备IP系统配置角色192.168.8.180centos7.92H4Gmaster192.168.8.181centos7.92H4Gnode1192.168.8.178centos7.92H4Gnode22、在所有节点上关闭swap分区masternode#临时关闭swap分区swapoff-asysctl-wvm.s......
  • Google Photos 利用 AI 驱动的视频预设重新设计视频编辑器
    在更新了“收藏”标签和搜索功能后,GooglePhotos现在正在推出其手机视频编辑器的重新设计。目标是让用户“比以往更容易地编辑喜欢的视频,制作成精彩片段分享。”GooglePhotos将主要的编辑工具放在“视频”标签的显眼位置。时间轴下方可以看到以下工具:静音增强:“一键增强颜......
  • ARS展览项目(二)——环境搭建:opencv、dlib、VS2017
    先说用到的软件和函数库VS2017——我用VS2017社区版来开发,原因是软件免费而且好用,本项目用C++来做opencv——OpenComputerVision是计算机视觉的库,有多种语言的接口,而且函数库也很丰富dlib——Dlib是一个包含机器学习算法的C++开源工具包,提供大量的机器学习/图像处理算法(网......
  • 架构设计:系统间通信(17)——服务治理与Dubbo 中篇(分析)
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • 20240910_021725 c语言 强制转换
    关于强转大转小就需要强转演练......
  • 20240910_031725 c语言 字符做加法
    ......