题目:
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路:
1.从头遍历给定字符串,然后对比匹配数组(即存储“abc”,"def"等的string数组),获得对应字符串;
2.将对应字符串拆解,依次与当前结果数组中的所有字符串相加,即获得当前的所有组合,将本次相加之前的字符串都去掉,进行下次遍历;(即遍历到2,结果数组中为a,b,c,遍历3后,结果数组中为a,b,c,ad,ae,af···,则需将a,b,c去掉)
3.思路比较简单,可之间看代码。
代码:
class Solution{
public:
vector<string> letterCombinations(string digits)
{
vector<string> result(1,"");
deque<string> tmp(1,"");
string letter[]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
int zero=(int)'0';
for(int i=0;i!=digits.size();++i)
{
string s=letter[(int)digits[i]-zero];
int len=tmp.size();
for(int j=0;j!=len;++j)
{
for(int k=0;k!=s.size();++k)
{
tmp.push_back(tmp[j]+s[k]);
}
}
for(int l=0;l!=len;++l)
tmp.pop_front();
}
result.clear();
for(deque<string>::iterator iter=tmp.begin();iter!=tmp.end();++iter)
result.push_back(*iter);
return result;
}
};