原題出于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;}
};
以上樹型結構圖片出自代碼隨想錄