问题描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:
一个数字一个数字找(穷举法)。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> a{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> c;
if(digits.empty()) return c;
c.push_back("");
for(int i = 0; i < digits.length(); i++){
int res = digits[i] - '2';//当前按键对应的字符串索引
int len = c.size();//前一次处理好的字符串数
for(int j = 0; j < len; j++){
for(int m = 0; m < a[res].length(); m++){
c.push_back(c[j] + a[res][m]);
}
}
c.erase(c.begin(),c.begin() + len);
}
return c;
}
};