LeetCode 17.电话号码的字母组合 C++写法
思路🧐:
使用深度优先搜索+递归进行解题。首先建立一个号码与字母的映射表,当接收传过来的号码字符串时减去字符0就可以拿到该号码。其次使用string存储当前号码所对应字母,然后for循环遍历字母并进行递归拼接,递归结束条件为当遍历完最后一个号码时,对存储字母组合的vector进行尾插取到该轮递归的字母组合。当该轮递归结束后,第一个号码的下一个字母开始递归,此时i和combination都已经重新变为第一次调用时的数据,依照该顺序又开始新一轮递归,直到组合完所有字母。
代码🔎:
class Solution { public: const char* LetterArr[10]= {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; void Combination(string digits,size_t i,string combination, vector<string>& str) { if(i == digits.size()) //当遍历完最后一个号码对应字母就尾插拼接 { str.push_back(combination); return; } int num = digits[i] - '0'; //取号码 string ch = LetterArr[num]; //取号码所对应字母 for(auto s : ch) { Combination(digits,i + 1,combination + s,str); //开始递归,i为号码下标,combination+s为拼接的字母 } } vector<string> letterCombinations(string digits) { vector<string> str; //存储字母组合 if(digits.empty()) //为空直接返回 return str; string combination; //存储拼接的字母 Combination(digits,0,combination,str); return str; } };