题解 | #牛名生成器#
牛名生成器
https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb
知识点
深度优先搜索DFS / 宽度优先搜索BFS
思路说明
数据范围很小, 可以确定为可以用暴搜解决; 枚举每一位可以填的字母, 逐个字母向后填, 由于字母表table给出的字母顺序就是由小到大的, 逐个填入的结果一定是符合字典序小优先的
具体实现上可以用bfs或者dfs实现
AC Code (C++) BFS
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param digits string字符串
* @return string字符串vector
*/
using psi = pair<string, int>;
vector<string> letterCombinations(string digits) {
// write code here
unordered_map<char, string> table = {{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};
vector<string> res;
// bfs
queue<psi> q;
q.emplace("", 0);
int n = (int)digits.size();
while (q.size()) {
auto [s, idx] = q.front();
q.pop();
if (idx == n) {
res.push_back(s);
continue;
}
char cur = digits[idx];
for (auto c : table[cur]) {
s.push_back(c);
q.emplace(s, idx + 1);
s.pop_back();
}
}
return res;
}
};


查看7道真题和解析