知识点
深度优先搜索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; } };