17. 电话号码的字母组合

  1. 题目链接

  2. 解题思路:一个简单的回溯题目。

  3. 代码

    class Solution {
    public:
    
        map<char, string> table{
            {'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}
        };
    
        // 目前已经在处理digits[i],path是[0...i]已经收集的字符了
        void process(string &digits, int i, vector<string> &res, string &path) {
            if (i == digits.length()) {
                res.push_back(path);
                return ;
            }
            string tmp = table[digits[i]];  
            for (auto &ch : tmp) {
                path.push_back(ch);
                process(digits, i + 1, res, path);
                path.pop_back();     // 恢复现场
            }
        }
        vector<string> letterCombinations(string digits) {
            vector<string> ans;
            if (digits.length() == 0) {
                return ans;
            }
            string path = "";
            process(digits, 0, ans, path);
            return ans;
        }
    };
    
posted @ 2024-12-18 10:39  ouyangxx  阅读(26)  评论(0)    收藏  举报