首页 > 其他 > 详细

17. 电话号码的字母组合

时间:2020-02-01 19:14:39      阅读:66      评论:0      收藏:0      [点我收藏+]

题目描述:

给定一个仅包含数字 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;
    }
};

 

17. 电话号码的字母组合

原文:https://www.cnblogs.com/thefatcat/p/12249287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!