题目描述
明确以下几个问题
- 除0和1之外每个数字对应了三个字母
- 选每个数字对应下的字母进行组合 获取这个组合
首先需要用哈希表将数字与对应的字母存储起来
const string letterMap[10] =
{
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};
之后就是回溯法的应用了,可以看下面这张图
代码实现如下
class Solution {
private:
const string letterMap[10] =
{
"", // 0
"", // 1
"abc", // 2
"def", // 3
"ghi", // 4
"jkl", // 5
"mno", // 6
"pqrs", // 7
"tuv", // 8
"wxyz", // 9
};
vector<string> result;
string s;
public:
void backtracking(string digits, int start_index)
{
if(start_index==digits.size())
{
result.push_back(s);
return;
}
int digit = digits[start_index] - '0';
string letters = letterMap[digit];
for(int i=0; i<letters.size(); i++)
{
s.push_back(letters[i]);
backtracking(digits, start_index+1);
s.pop_back();
}
return;
}
vector<string> letterCombinations(string digits) {
if(digits.size()==0)
{
return result;
}
backtracking(digits, 0);
return result;
}
};