原题出于leetcode第17题https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/题目如下:
题目稍微有点复杂,初看会感觉特别复杂,首先我们需要理清思路:
-
最后的结果是字母组合,因此遍历的是字母,而字母对应数字,因此需要用二维数组构建从数字到字母的映射
-
假设digits=“23”,需要先从[a,b,c]中取一个字母,再从[d,e,f]中取,树形结构如下:
4.1树型结构
4.2代码
class Solution {
public:
string letterMap[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
string s;
vector<string> result;
void backtracking(string digits,int index=0){
if(index==digits.size()){
result.push_back(s);
return ;
}
int digit=digits[index]-'0';
string letter=letterMap[digit];
for(int i=0;i<letter.size();i++){
s.push_back(letter[i]);
backtracking(digits,index+1);
s.pop_back();
}
return ;
}
vector<string> letterCombinations(string digits) {
if(digits.empty()) return {};
backtracking(digits);
return result;
}
};
以上树型结构图片出自代码随想录