class Solution {
public:
// 将数字转化为字母v-'0'-2+'a'和+1、+2
string target;
vector<string> res;
vector<string> letterCombinations(string digits) {
if(digits.length()==0)return res;
bk(digits, 0);
return res;
}
// 破防了,怎么这比九宫格有的对三个有的对四个,我还以为全是三个
// void bk(string digits, int start) {
// if (target.length() == digits.length()) {
// res.push_back(target);
// return;
// }
// // 每个字母有三种情况
// for (int j = 0; j < 3; j++) {
// target += 3*(digits[start] - '0' - 2) + 'a' + j;
// bk(digits, start + 1);
// target.pop_back();
// }
// }
void bk(string digits, int start) {
if (target.length() == digits.length()) {
res.push_back(target);
return;
}
vector<string> mapping = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
// 遍历当前数字对应的字母集
for (char ch : mapping[digits[start] - '0']) {
target.push_back(ch);
bk(digits, start + 1);
target.pop_back();
}
}
};