题解 | #牛名生成器#
牛名生成器
https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb
考察的知识点:回溯;
解答方法分析:
- 将数字和字母的映射关系以键值对的形式存储在一个哈希表中。这样可以方便地根据给定的数字获取对应的字母字符串。
- 定义一个辅助函数 backtrack,在其中进行回溯操作。回溯函数的参数包括当前的组合字符串,当前数字字符串的索引以及数字字符串本身。
- 在回溯函数中,首先判断当前数字字符串的索引是否等于数字字符串的长度,如果相等,则将当前组合字符串添加到结果列表中。
- 根据当前数字获取对应的字母字符串。遍历字母字符串,将每个字母加入到当前组合字符串,并递归调用回溯函数,传递更新后的参数。这样可以探索到所有可能的组合。
- 递归结束后,我们需要将当前加入的字母从组合字符串中移除,以便进行下一次迭代。
- 返回结果列表。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: vector<string> letterCombinations(string digits) { vector<string> res; if (digits.empty()) { return res; } unordered_map<char, string> letters = { {'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"} }; string combination; backtrack(res, letters, combination, digits, 0); return res; } private: void backtrack(vector<string>& res, unordered_map<char, string>& letters, string& combination, string& digits, int index) { if (index == digits.size()) { res.push_back(combination); return; } string lettersStr = letters[digits[index]]; for (char c : lettersStr) { combination.push_back(c); backtrack(res, letters, combination, digits, index + 1); combination.pop_back(); } } };