C语言重构【17】电话号码的字母组合
程序员文章站
2022-03-12 17:33:52
...
所有题目源代码:Git地址
题目
给定一个仅包含数字 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)
下一篇: mac 怎么安装 node.js