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"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
class Solution {
private:
vector<string> init(string a){
vector<string> lc;
string s;
int l = a.length();
for(int i=0;i<l;i++){
s.assign(a,i,1);
lc.push_back(s);
}
return lc;
}
vector<string> multi(vector<string> &a,string b){
vector<string> long_s;
string ss;
int al=a.size();
int bl=b.length();
for(int i =0;i<al;i++){
for(int j =0;j<bl;j++){
ss.assign(a[i]);
ss.append(b,j,1);
long_s.push_back(ss);
}
}
return long_s;
}
string dtostr(char di){
string dst;
switch(di){
case '2':dst.assign("abc");break;
case '3':dst.assign("def");break;
case '4':dst.assign("ghi");break;
case '5':dst.assign("jkl");break;
case '6':dst.assign("mno");break;
case '7':dst.assign("pqrs");break;
case '8':dst.assign("tuv");break;
case '9':dst.assign("wxyz");break;
}
return dst;
}
public:
vector<string> letterCombinations(string digits) {
int l=digits.length();
const char* dig = digits.c_str();
vector<string> lc;
lc = init(dtostr(dig[0]));
for(int i=1;i<l;i++){
lc = multi(lc,dtostr(dig[i]));
}
return lc;
}
};