题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思想:
利用数据结构中队列的“先进先出”的知识,采用实时更新队列的内容实现遍历。
步骤说明:
1.建立一个map哈希表;
2.新建一个队列;
3.将第一个字符串所对应的码表逐步进入到队列中;
4.出队操作,存储当前出队的string;
5.将此string与后一个字符串所对应的码表中每一个值相加并逐步进入到队列中;
6.最终队列中存储的即为所有情况的string
代码:
class Solution { public: vector<string> letterCombinations(string digits) { map<char,string>m={{‘2‘,"abc"},{‘3‘,"def"},{‘4‘,"ghi"},{‘5‘,"jkl"},{‘6‘,"mno"},{‘7‘,"pqrs"},{‘8‘,"tuv"},{‘9‘,"wxyz"}}; queue<string>que; vector<string>res; int Size=digits.size(); for(int i=0;i<m[digits[0]].size();i++){ string str; str.push_back(m[digits[0]][i]); que.push(str); //队列添加元素用push,不是push_back } for(int i=1;i<Size;i++){ int length=que.size(); while(length--){ for(int j=0;j<m[digits[i]].size();j++){ string tmp=que.front(); tmp+=m[digits[i]][j]; que.push(tmp); } que.pop(); } } while(!que.empty()){ //!que.empty()-->如果que不为空返回真 res.push_back(que.front()); que.pop(); } return res; } };
原文:https://www.cnblogs.com/thefatcat/p/12249287.html