原题出于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;}
};
以上树型结构图片出自代码随想录