代码随想录:电话号码的字母组合

class Solution {
public:
    // 将数字转化为字母v-'0'-2+'a'和+1、+2
    string target;
    vector<string> res;
    vector<string> letterCombinations(string digits) {
        if(digits.length()==0)return res;
        bk(digits, 0);
        return res;
    }

    // 破防了,怎么这比九宫格有的对三个有的对四个,我还以为全是三个
    // void bk(string digits, int start) {
    //     if (target.length() == digits.length()) {
    //         res.push_back(target);
    //         return;
    //     }
    //     // 每个字母有三种情况
    //     for (int j = 0; j < 3; j++) {
    //         target += 3*(digits[start] - '0' - 2) + 'a' + j;
    //         bk(digits, start + 1);
    //         target.pop_back();
    //     }
    // }
    void bk(string digits, int start) {
        if (target.length() == digits.length()) {
            res.push_back(target);
            return;
        }
        vector<string> mapping = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

        // 遍历当前数字对应的字母集
        for (char ch : mapping[digits[start] - '0']) {
            target.push_back(ch);
            bk(digits, start + 1);
            target.pop_back();
        }
    }
};
posted @ 2025-01-20 17:15  huigugu  阅读(9)  评论(0)    收藏  举报