首页 > 其他分享 >LeetCode-17 电话号码的字母组合

LeetCode-17 电话号码的字母组合

时间:2023-12-25 10:07:12浏览次数:37  
标签:digits string 17 res length str 字母组合 numcharmap LeetCode


LeetCode-17 电话号码的字母组合

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

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

LeetCode-17 电话号码的字母组合_leetcode

示例 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'] 的一个数字。

solution

采用回溯

  1. 建立哈希表,完成对应数字到对应字符串的映射
  2. 通过回溯算法遍历每一种可能
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> res;
        string str;
        int l = digits.length();
        if (l == 0) {
            return res;
        }
        unordered_map<char, string> numcharmap{
                {'2', "abc"},
                {'3', "def"},
                {'4', "ghi"},
                {'5', "jkl"},
                {'6', "mno"},
                {'7', "pqrs"},
                {'8', "tuv"},
                {'9', "wxyz"}
        };
        backtrack(res, str, digits, numcharmap, 0);
        return res;
    }

    void backtrack(vector<string> &res, string str, string digits, unordered_map<char, string> numcharmap, int n) {
        if (str.length() == digits.length()) {
            res.push_back(str);
            return;
        } else if (n>=digits.length())
        {
            return;
        }
        char c = digits[n];
        string letters = numcharmap.at(c);
        for (int i = 0; i < letters.length(); ++i) {
            char letter = letters[i];
            backtrack(res, str + letter, digits, numcharmap, n + 1);
        }
    };
};
//leetcode submit region end(Prohibit modification and deletion)

int main() {
    Solution solution;
    solution.letterCombinations("23");
}


标签:digits,string,17,res,length,str,字母组合,numcharmap,LeetCode
From: https://blog.51cto.com/u_14189203/8963483

相关文章

  • LeetCode-15 三数之和
    LeetCode-15三数之和给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。**注意:**答案中不可以包含重复的三元组。示例1:输入:nums=[-1......
  • 『LeetCode』8. 字符串转换整数 (atoi) String to Integer (atoi)
    题目描述请你来实现一个myAtoi(strings)函数,使其能将字符串转换成一个32位有符号整数(类似C/C++中的atoi函数)。函数myAtoi(strings)的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正......
  • 17 常见接口限流的技术方案
    为了防止用户异常调用接口,需要进行一些限流操作。常见的接口限流操作有如下方案。方案分为2种大的方面,分别是技术方面的和业务方面的。技术方案1,就是判断是不是重复的接口,然后限制这个接口调用的频率。例如京东的评价接口,同一个用户调用的最短时间定的是3秒钟。技术方案2,就是在应用......
  • 2023-2024-1 20231317《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2023-2024-1计算机基础与程序设计第一周作业)这个作业的目标<《C语言第12章》>作业正文https://www.cnblogs.com/TerMo/p/17924086.html本......
  • [LeetCode Hot 100] LeetCode394. 字符串解码
    题目描述思路思路:碰到数字:压入数字栈,注意多位数的情况碰到字母:直接拼接到res遇到[:将num和res分别压入栈遇到]:开始处理栈顶元素方法一:classSolution{publicStringdecodeString(Strings){intnum=0;StringBuilderres=newStringBuil......
  • Python教程(17)——python模块是什么?python模块详解
    Python模块简介模块是一个包含了Python定义和语句的文件,可用于将功能组织成可重用和可维护的代码块。每个Python文件都可以作为一个模块,模块可以包含变量、函数、类或可执行代码。通过使用模块,我们可以将代码分离成逻辑单元,促进模块化编程。所以我们可以简单的理解为,一个py文件就......
  • 『LeetCode』7. 整数反转 Reverse Integer
    题目描述给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例3:输入:x......
  • [LeetCode Hot 100] LeetCode739. 每日温度
    题目描述思路:单调递减栈使用单调栈的模板即可。根据题意可知,该题使用的是单调递减栈。问题抽象为:找出数组中右边第一个比我大的元素。方法一:classSolution{publicint[]dailyTemperatures(int[]temperatures){//用于存放结果int[]res=new......
  • [LeetCode Hot 100] LeetCode42. 接雨水
    题目描述思路一:单调栈柱子的高度递减的时候是装不了水的,当碰到第一个比之前高的柱子才可以装水。此时计算栈顶索引能装的水:宽:i-left-1(这个left为栈顶元素pop之后的peek值)高:min(height[left],height[i])-height[top]该题维护的是一个单调递减栈方法一:对应思路......
  • [LeetCode Hot 100] LeetCode84. 柱状图中最大的矩形
    题目描述思路:枚举+优化(单调栈)先固定矩阵的高。然后向左向右找到第一个比当前元素值小的元素,确定好左右边界。对于元素2来说:向左找到第一个比当前元素值小的元素:1的右边界向右找到第一个比当前元素值小的元素:3的右边界枚举每个元素的上边界,确定往左数最远到达哪个边界......