题目
C++ solution
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
if(digits.size() == 0) // 数字串为空串则直接返回空数组
return result;
vector<string> letters = { "abc", "def",
"ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
string comb; // 字母组合串
backTracking(result, letters, digits, 0, comb);
return result;
}
void backTracking(vector<string>& result, vector<string>& letters,
string& digits, int index, string& comb)
{
if(index == digits.length()) // 搜索到最后一个字母,得到其中一个字母组合串
{
result.push_back(comb);
return;
}
for(int i = 0; i < letters[digits[index] - '2'].length(); i++) // 每一层搜索该按键的字母个数
{
comb += letters[digits[index] - '2'][i]; // 将本层按键的一个字母加到字母组合串
backTracking(result, letters, digits, index + 1, comb); // 深度优先搜索,搜索下一层
comb.pop_back(); // 回溯,去搜索其他分支
}
}
};
简要题解
本题只需采用深度优先搜索,当搜索到深度最深时便得到一条路径,将路径上的字母合并在一起便得到其中一个字母组合串。然后回溯到上层节点,去搜索其他分支,当所有路径都搜索完毕时,就得到全部的字母组合串。简要示意图如下: