题干:
代码:
class Solution {
public:
string lettersMap[10]={
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz",
};
vector<string> res;
string tmp;
void backtracking(string digits, int index){
if(index == digits.size()){
res.push_back(tmp);
return;
}
int digit = digits[index] - '0';
string s = lettersMap[digit];
for(int i = 0; i < s.size(); i++){
tmp.push_back(s[i]);
backtracking(digits, index + 1);
tmp.pop_back();
}
}
vector<string> letterCombinations(string digits) {
int index = 0;
if(digits.size() == 0)return res;
backtracking(digits, 0);
return res;
}
};
首先建立数字键盘映射。
定义了储存答案的“二维”容器res,暂时储存单一答案的容器tmp,目前遍历到的位置index,目前遍历到的数字(通过-‘0’变成数字),目前选取的对应字符串。
递归终止的条件:index == digits.size(),遍历完才算完:
进入下一层需要index + 1。