题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
class Solution {
private:
// 这里的path可以不定以为 vector 因为string是可以直接进行 插入和删除操作的
string path;
vector<string> result;
// 传入的参数中需要有个来记录是哪个数字
// 第一个参数 用 const 修饰,且 用引用传参
void backtracking(const string& digits, int index)
{
// 加const这个是比较难想到的点
const string mp[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
// 终止条件
if(index == digits.size())
{
result.push_back(path);
// 终止条件里的return又忘了
return;
}
string str =mp[digits[index] - '0'];
// for 是横向走的,所以到这里的时候,就已经确定了是数字几,
for(int i = 0; i < str.size() ; i++)
{
path.push_back(str[i]);
backtracking(digits, index+1);
path.pop_back();
}
}
public:
vector<string> letterCombinations(string digits)
{
// 定义的成员变量需要清空一下
path.clear();
result.clear();
// 需要判空,
if(digits.size() == 0)
{
return result;
}
backtracking(digits, 0);
return result;
}
};