(82) 17. Combinación de letras del número de teléfono (código de acceso)

题目链接:
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
难度:中等
17. 电话号码的字母组合
	给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
	给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:	
	输入:"23"
	输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
	尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

El problema no es difícil, se puede resolver una idea más simple, basta con utilizar el método recursivo para enumerar todas las situaciones.

class Solution {
    
    
public:
	// 数字-字符串
    unordered_map<char, string> phoneMap{
    
    
        {
    
    '2', "abc"},
        {
    
    '3', "def"},
        {
    
    '4', "ghi"},
        {
    
    '5', "jkl"},
        {
    
    '6', "mno"},
        {
    
    '7', "pqrs"},
        {
    
    '8', "tuv"},
        {
    
    '9', "wxyz"}
    };
    // 返回答案
    vector<string> ans;
    
    vector<string> letterCombinations(string digits) {
    
    
    	// 若输入为空 返回空
        if(digits.size()==0){
    
    
            return ans;
        }
        // 当前的字符串
        string combination="";
        back(combination,0,digits);
        return ans;
    }
	// i 的意思是 当前已枚举到 digits[i]
    void back(string combination,int i,string &digits){
    
    
    	// 结束 入队列
        if(combination.size()==digits.size()){
    
    
            ans.push_back(combination);
        }else{
    
    
        	// c 当前的数字
            char c=digits[i];
            // 取出 c 对应的字符串
            string s=phoneMap[c];
            // 对取出的 字符串 进行枚举
            for (int j = 0; j < s.size(); ++j) {
    
    
                back(combination + s[j], i + 1, digits);
            }
        }
    }
};

Es un poco simple. . . .

Supongo que te gusta

Origin blog.csdn.net/li_qw_er/article/details/108231225
Recomendado
Clasificación