• 【Leetcode】 17. 电话号码的字母组合


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

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

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

    示例 2:

    输入digits = ""
    输出[]

    示例 3:

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

    提示:

    0 <= digits.length <= 4
    
    • 1

    digits[i] 是范围 ['2', '9'] 的一个数字。


    AC:

    /*
     * @lc app=leetcode.cn id=17 lang=cpp
     *
     * [17] 电话号码的字母组合
     */
    
    // @lc code=start
    class Solution {
    private:
        const string letterMap[10] = {
            "",
            "",
            "abc",
            "def",
            "ghi",
            "jkl",
            "mno",
            "pqrs",
            "tuv",
            "wxyz",
        };
    public:
        string s;
        vector<string> result;
        void backtracking(const string& digits, int index) {
            if(digits.size() == index) {
                result.push_back(s);
                return ;
            }
            int digit = digits[index] - '0';
            string letter = letterMap[digit];
            for(int i = 0; i < letter.size(); i++)
            {
                s.push_back(letter[i]);
                backtracking(digits, index + 1);
                s.pop_back();
            }
        }
        vector<string> letterCombinations(string digits) {
            s.clear();
            result.clear();
            if(digits.size() == 0)
                return result;
            backtracking(digits, 0);
            return result;
        }
    };
    // @lc code=end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    AC
    The function uses a private member variable letterMap to map each digit to its corresponding set of letters. The letterMap is an array of strings, where each string represents the set of letters corresponding to a digit. For example, letterMap[2] is the string “abc”, which represents the letters ‘a’, ‘b’, and ‘c’ corresponding to the digit 2.

    The function uses a recursive backtracking approach to generate all possible letter combinations. The backtracking function takes two arguments: the input string of digits and an index representing the current position in the input string. The function first checks if the current position is equal to the length of the input string. If so, it adds the current combination of letters to the result vector and returns.

    If the current position is less than the length of the input string, the function retrieves the set of letters corresponding to the current digit using the letterMap array. It then iterates over each letter in the set and adds it to the current combination of letters. The function then recursively calls itself with the updated combination of letters and the next index. After the recursive call returns, the function removes the last letter from the combination of letters to backtrack and try the next letter in the set.

    The letterCombinations function initializes the result vector and calls the backtracking function with the input string and an initial index of 0. If the input string is empty, the function returns an empty vector.

    Overall, this implementation is a simple and efficient way to generate all possible letter combinations of a given string of digits using a backtracking algorithm. One possible way to improve the code would be to add error checking to ensure that the input string only contains digits. Additionally, the variable names could be more descriptive to make the code easier to read and understand.


    How does the backtracking algorithm work in generating all possible letter combinations?

    The backtracking algorithm used in this code works by recursively generating all possible letter combinations of a given string of digits. The algorithm uses a private member variable letterMap to map each digit to its corresponding set of letters.

    The backtracking function takes two arguments: the input string of digits and an index representing the current position in the input string. The function first checks if the current position is equal to the length of the input string. If so, it adds the current combination of letters to the result vector and returns.

    If the current position is less than the length of the input string, the function retrieves the set of letters corresponding to the current digit using the letterMap array. It then iterates over each letter in the set and adds it to the current combination of letters. The function then recursively calls itself with the updated combination of letters and the next index. After the recursive call returns, the function removes the last letter from the combination of letters to backtrack and try the next letter in the set.

    The letterCombinations function initializes the result vector and calls the backtracking function with the input string and an initial index of 0 . If the input string is empty, the function returns an empty vector.

    Overall, the backtracking algorithm works by generating all possible letter combinations of a given string of digits by recursively iterating over each digit and its corresponding set of letters. The algorithm uses a simple and efficient approach to generate all possible combinations of letters, and is a common technique used in many other combinatorial problems .

  • 相关阅读:
    3GPP协议解读(一)_23.501_23.502_PDU Session_SMF与UDP的交互
    投资组合优化的人工蜂群算法(Matlab代码实现)
    线程的创建方式
    实用工具系列 - Pycharm安装下载使用
    【四】相机标定
    Python tkinter -- 第11章滚动条
    让CHAT生成对桥梁范围内施工注意事项及防护措施
    MySQL性能优化-范式设计和反范式设计
    【老生谈算法】matlab实现图像增强算法源码——图像增强算法
    Python 读写文件
  • 原文地址:https://blog.csdn.net/qq_54053990/article/details/133491902