给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
思路:递归回溯,使用字符串数组存放数字对应的字符串,然后根据传来的数字取出字符串,然后再正常的递归回溯组合即可。
class Solution {
private:
const string mmap[10]=
{
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz",
};
public:
vector<string>ans_sum;
string ans;
void find(string digits,int index)
{
if(index==digits.size())
{
ans_sum.push_back(ans);
return;
}
int digit=digits[index]-'0';
string letter=mmap[digit];
for(int i=0;i<letter.size();i++)
{
ans.push_back(letter[i]);
find(digits,index+1);
ans.pop_back();
}
}
public:
vector<string> letterCombinations(string digits) {
//digits代表数字字符串 index用于遍历字符串中的数字
if(digits.size()==0)
{
return ans_sum;
}
find(digits,0);
return ans_sum;
}
};