欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言重构【17】电话号码的字母组合

程序员文章站 2022-03-12 17:33:52
...

所有题目源代码:Git地址

题目

C语言重构【17】电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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



示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

方案:

  • 和Java版差不多,区别在C++没用Map存一下数字,不过也一样
class Solution {
public:
    
    vector<string> letterCombinations(string digits) {
            int len = digits.size();
            return Combinations(digits,0,len);
    }

    vector<string> Combinations(string digits,int index, int len) {
        vector<string> tmp;
        vector<string> tmp2;
        vector<string> res;
        switch (digits[index])
            {
                case '2':
                    tmp2.push_back("a");
                    tmp2.push_back("b");
                    tmp2.push_back("c");
                    break;
                case '3':
                    tmp2.push_back("d");
                    tmp2.push_back("e");
                    tmp2.push_back("f");
                    break;
                case '4':
                    tmp2.push_back("g");
                    tmp2.push_back("h");
                    tmp2.push_back("i");
                    break;
                case '5':
                    tmp2.push_back("j");
                    tmp2.push_back("k");
                    tmp2.push_back("l");
                    break;
                case '6':
                    tmp2.push_back("m");
                    tmp2.push_back("n");
                    tmp2.push_back("o");
                    break;
                case '7':
                    tmp2.push_back("p");
                    tmp2.push_back("q");
                    tmp2.push_back("r");
                    tmp2.push_back("s");
                    break;
                case '8':
                    tmp2.push_back("t");
                    tmp2.push_back("u");
                    tmp2.push_back("v");
                    break;
                case '9':
                    tmp2.push_back("w");
                    tmp2.push_back("x");
                    tmp2.push_back("y");
                    tmp2.push_back("z");
                    break;
                default:
                    break;
            }
        if(index < len-1){
            
            tmp=Combinations(digits,index+1,len);
            for(int i=0;i<tmp.size();i++){
                for(int j=0;j<tmp2.size();j++){
                    res.push_back(tmp2[j]+tmp[i]);
                }
            }
            return res;
        }else{
          return tmp2;   
        } 
            
    }
};
复杂度计算
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)