电话号码的字母组合

题目

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

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

电话号码

思路

首先,创建一个map对象,对应数字和字符串的映射。然后,读取给定的字符串长度,即为组合字符串的长度。依次遍历给定字符串的每一个数字进行组合。

class Solution {
public:
    unordered_map<char, string> str_map;
    vector<string> res;
    void SetDigit2StringMap()
    {
        str_map['2'] = string("abc");str_map['3'] = string("def");str_map['4'] = string("ghi");str_map['5'] = string("jkl");str_map['6'] = string("mno");str_map['7'] = string("pqrs");str_map['8'] = string("tuv");str_map['9'] = string("wxyz");
    }
    void letterCombinationsAux(string digits, char* str, int k) {
        string digit2str = str_map[digits[k-1]];
        for(int i=0; i<digit2str.size(); ++i)
        {
            str[k-1]=digit2str[i];
            if(k-1 == 0)
            {
                res.emplace_back(string(str));
                continue;
            }
            letterCombinationsAux(digits, str, k-1);
        }
    }
    vector<string> letterCombinations(string digits) {
        int k = digits.size();
        if(k == 0) return res;
        SetDigit2StringMap();
        char* str = new char[k+1];str[k]='\0';
        letterCombinationsAux(digits, str, k);
        delete[] str;
        return res;
    }
};

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top