本文介绍: LeetCode:17.电话号码的字母组合_哔哩哔哩_bilibili。的字符串返回所有它能表示的字母组合代码随想录 (programmercarl.com)解决思路:1.创建字符集(使数字字母集做映射)注意 1 不对应任何字母。给出数字字母映射如下(与。循环问题,举个栗子:输入。1).确定回溯函数参数。3).确定单层遍历逻辑

17. 电话号码的字母组合 – 力扣(LeetCode)


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

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

示例 1:

输入digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

本题需要解决三个问题,思考和分析

  • (1)数字和字母集合如何做映射
  • (2)两个字母就需要两个for循环,那很多个字母岂不是要很多层for循环嵌套,怎么解决?、
  • (3)输入1 * #按键等等异常情况

解决思路:1.创建字符集(使数字和字母集做映射) 

const string letterMap[10] = {
    "",     // 0
    "",     // 1
    "abc",  // 2
    "def",  // 3
    "ghi",  // 4
    "jkl",  // 5
    "mno",  // 6
    "pqrs", // 7
    "tuv",  // 8
    "wxyz", // 9
};

2.回溯算法来解决 for 循环的问题,举个栗子:输入“23”,长度为 2

>>回溯三部曲:

1).确定回溯函数参数

vector<string&gt; result;
string strPath;
void backtracking(const string&amp; digits, int index)

2).确定终止条件

if(index == digits.size()) {
    result.push_back(strPath);
    return;
}

3).确定单层遍历逻辑

int num = digits[index]-'0';// 将index指向的数字转为int
string charSet = letterMap[num];// 取数字对应的字符集
for(int i=0;i<charSet.size();i++) {
    strPath.push_back(charSet[i]);// 处理
    backtracking(digits,index+1);// 递归,注意index+1,一下层要处理下一个数字了
    strPath.pop_back();// 回溯
}

C++ 代码: 

class Solution {
public:
    vector<string> result;
    string strPath;
    const string letterMap[10] = {
        "",     // 0
        "",     // 1
        "abc",  // 2
        "def",  // 3
        "ghi",  // 4
        "jkl",  // 5
        "mno",  // 6
        "pqrs", // 7
        "tuv",  // 8
        "wxyz", // 9
    };
    void backtracking(const string&amp; digits,int index) {
        if(index == digits.size()) {
            result.push_back(strPath);
            return;
        }
        int num = digits[index]-'0';// 将index指向的数字转为int
        string charSet = letterMap[num];// 取数字对应的字符集
        for(int i=0;i<charSet.size();i++) {
            strPath.push_back(charSet[i]);// 处理
            backtracking(digits,index+1);// 递归,注意index+1,一下层要处理下一个数字了
            strPath.pop_back();// 回溯
        }
    }
    vector<string> letterCombinations(string digits) {
        if (digits.size() == 0) return result;
        backtracking(digits,0); 
        return result;
    }
};

参考和推荐文章视频: 

代码随想录 (programmercarl.com)icon-default.png?t=N7T8https://www.programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html#%E6%80%9D%E8%B7%AF还得用回溯算法!| LeetCode:17.电话号码的字母组合_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1yV4y1V7Ug/?spm_id_from=333.788&vd_source=a934d7fc6f47698a29dac90a922ba5a3

原文地址:https://blog.csdn.net/weixin_41987016/article/details/134670098

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_6627.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注