17. 电话号码的字母组合
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
思路:
思路:不断地将res中的字符与新的字符相加,然后再将res与新字符相加的字符删除掉
原始res=""
当输入2,3时,通过循环将res="abc"
然后tmp=a,str="def"
组成新的组合res="b c ad ae af"//将a消除
不断循环 res="ad ae af bd be bf cd ce cf"
再继续循环
重点就是erase()的用法,以及记得要消除第一个与新的字符组合过的字符;
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;
if(digits.size()==0)return res;
string list[]={"","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
res.push_back("");
for(int i=0;i<digits.size();++i){
int len=res.size();
string str=list[digits[i]-'1'];
for(int j=0;j<len;++j){
string tmp=res.front();//放在res字符串的头部
res.erase(res.begin());//消除第一个元素,将第一个元素与新的字符相结合
for(int k=0;k<str.size();++k)
res.push_back(tmp+str[k]);
}
}
return res;
//思路:不断地将res中的字符与新的字符相加,然后再将res与新字符相加的字符删除掉
}
};