【算法百题之四十九】电话号码的字母组合
大家好,我是Lampard~~
很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!
今天的问题是:电话号码的字母组合
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路:这题我感觉挺简单的...主要是考察c++字符串函数的调用,算法方面倒是两个循环就搞定了。也不知道为啥这道题能有中等难度。首先因为是从数字2开始,那么num2string前两个元素定位空表占个位置即可。然后唯一的难度是如何把读取字符串中的字符?也就是string转为int,我们可以用for (char &ch : digits) 方式来拿到char类型,然后再ch - ‘0’就可以得到int类型了。
vector<string> letterCombinations(string digits) {
vector<vector<string>> num2strings = {{},{},
{"a", "b", "c"},
{"d", "e", "f"},
{"g", "h", "i"},
{"j", "k", "l"},
{"m", "n", "o"},
{"p", "q", "r", "s"},
{"t", "u", "v"},
{"w", "x", "y", "z"}};
vector<string> res = {};
if (digits.length() == 0) return res;
for (char &ch : digits) {
int index = ch - '0';
if (res.size() == 0) {
res = num2strings[index];
continue;
}
vector<string> curRes = {};
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < num2strings[index].size(); j++) {
curRes.push_back(res[i] + num2strings[index][j]);
}
}
res = curRes;
}
return res;
}
测试及结果: