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"].
题目理解不难,就是找出所有的可能。需要有的是一个迭代的思想,假如只给出了一个2,那么所有的可能就是[a,b,c],这时候如果再加一个3,那么就是两个字符串两重循环就能找到所有组合[ad,ae,af,bd,be,bf,cd,ce,cf],如果多了的话怎么办呢?假如此时还有一个数4,那么相当于在前两个组合获得的
[ad,ae,af,bd,be,bf,cd,ce,cf]的基础上,他们种的每一个都要与4代表的字符串种的每个字母组合,这样的话,又相当于是两个字符串的所有组合了。有一个特殊处理,就是迭代的时候要先把第一个数代表的字符串的所有可能放进数组里。
vector<string> letterCombinations(string digits) {
vector<string> ans;
int n=digits.length();
if(n){
string temp=transfer(digits[0]);
for(int i=0;i<temp.length();i++){
string t="";
t+=temp[i];
ans.push_back(t);
}
}
for(int i=1;i<n;i++)ans=comb(ans,transfer(digits[i]));
return ans;
}
string transfer(char c){
switch(c){
case'0':return " ";break;
case'2':return "abc";break;
case'3':return "def";break;
case'4':return "ghi";break;
case'5':return "jkl";break;
case'6':return "mno";break;
case'7':return "pqrs";break;
case'8':return "tuv";break;
case'9':return "wxyz";break;
}
}
vector<string> comb(vector<string>s1,string s2){
int l1=s1.size();
int l2=s2.length();
vector<string> tmp;
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
string temp=s1[i];
temp+=(s2[j]);
tmp.push_back(temp);
}
}
return tmp;
}