https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/

<aside> 💡

本题与前两题组合的差别:

  1. 之前的组合是在一个集合中选取元素进行组合,本题是在多个集合中进行组合
  2. 本题中多了一步从数字映射到字母的操作

回溯三部曲:

map<char, vector<char>> mp;
string cur;
vector<string> ans;

void backtracking(int pos, const string& digits) {
    if (cur.size() == digits.size()) {
        ans.push_back(cur);
    }

    vector<char> dict = mp[digits[pos]];
    for (int i = 0; i < dict.size(); ++i) {
        cur.push_back(dict[i]);
        backtracking(pos + 1, digits);
        cur.pop_back();
    }
}

vector<string> letterCombinations(string digits) {
    if (digits.empty()) {
        return {};
    }
    mp.insert({ '2', {'a', 'b', 'c'}});
    mp.insert({ '3', {'d', 'e', 'f'}});
    mp.insert({ '4', {'g', 'h', 'i'}});
    mp.insert({ '5', {'j', 'k', 'l'}});
    mp.insert({ '6', {'m', 'n', 'o'}});
    mp.insert({ '7', {'p', 'q', 'r', 's'}});
    mp.insert({ '8', {'t', 'u', 'v'}});
    mp.insert({ '9', {'w', 'x', 'y', 'z'}});

    backtracking(0, digits);
    return ans;
}