给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
提示:
0 <= digits.length <= 4
digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
class Solution {
public:
const string stringmap[10] = {
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz",
};
vector<string> result;
string path;
void backtracking(const string& digits, int index) {
if(index == digits.size()) {
result.push_back(path);
return;
}
//取出当前数字字符对应的数字
int digit = digits[index] - '0';
//取出数字对应的字符串
string letters = stringmap[digit];
//对每一个字符串进行遍历,for循环的次数为当前数字字符串的长度
for(int i = 0; i < letters.size(); i++) {
path.push_back(letters[i]);
//递归遍历下一个数字对应的字符串,每一层递归都嵌套一层遍历
backtracking(digits, index + 1);
path.pop_back();
}
}
vector<string> letterCombinations(string digits) {
result.clear();
path.clear();
//如果为空串,则直接输出空字符
if(digits.size() == 0) {
return result;
}
backtracking(digits, 0);
return result;
}
};