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.
题意:根据输入的字符串,返回其各个字符对应手机上的字符组合。
这题关键的点主要有:
1)当输入为空字符串,则输出的vector也要包含一个空字符串。
2)输入的字符范围介于'2'--'9'之间,假设输入字符串长度为n,则要新建一个长度为n+1的字符串,并将其第n+1位置为'\0',然后将其1至n位按对应的字符插入即可,此处用到了递归调用的过程。
class Solution {
public:
vector<string> letterCombinations(string digits) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<string> res;
if(digits=="")
{
res.push_back("");
return res;
}
int length=digits.size();
char *letter=new char[length+1];
letter[length]='\0';
combination(res,digits,letter,0,length);
return res;
}
void combination(vector<string> &res,string digits,char *letter,int index,int length)
{
if(index==length)
res.push_back(letter);
switch(digits[index])
{
case '2':
for(int i=0;i<3;i++)
{
letter[index]='a'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '3':
for(int i=0;i<3;i++)
{
letter[index]='d'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '4':
for(int i=0;i<3;i++)
{
letter[index]='g'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '5':
for(int i=0;i<3;i++)
{
letter[index]='j'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '6':
for(int i=0;i<3;i++)
{
letter[index]='m'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '7':
for(int i=0;i<4;i++)
{
letter[index]='p'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '8':
for(int i=0;i<3;i++)
{
letter[index]='t'+i;
combination(res,digits,letter,index+1,length);
}
break;
case '9':
for(int i=0;i<4;i++)
{
letter[index]='w'+i;
combination(res,digits,letter,index+1,length);
}
break;
default:
break;
}
}
};