力扣 17. 电话号码的字母组合

81 阅读1分钟

🔗 leetcode.cn/problems/le…

题目

  • 给 2-9 组成的字符串,返回他能表示的所有字母
  • 数字和字母的映射关系参考九宫格

思路

  • 回溯,递归出口是遍历至 digits 的末尾

代码

class Solution {
public:
    void dfs(string& digits, int index, vector<vector<char>>& num, vector<string>& ans, string& tmp) {
        if (index == digits.size()) {
            ans.push_back(tmp);
            return;
        }
        for (int i = 0; i < num[digits[index] - '0'].size(); i++) {
            tmp.push_back(num[digits[index] - '0'][i]);
            dfs(digits, index + 1, num, ans, tmp);
            tmp.pop_back();
        }

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

        
        string tmp;
        dfs(digits, 0, num, ans, tmp);
        return ans;
    }
};