- 题目描述:电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- C++编程实现:
(1)递归方法:深度遍历
class Solution {
public:
vector<string> letterCombinations(string digits) {
unordered_map<char, vector<string>> mp;
mp['2'] = {"a","b","c"};
mp['3'] = {"d","e","f"};
mp['4'] = {"g","h","i"};
mp['5'] = {"j","k","l"};
mp['6'] = {"m","n","o"};
mp['7'] = {"p","q","r","s"};
mp['8'] = {"t","u","v"};
mp['9'] = {"w","x","y","z"};
int nsize = digits.size();
if (nsize < 1)
return {};
vector<string> tmpstr = mp[digits[nsize-1]];
for (int i=nsize-1; i>0; i--)
tmpstr = combin(mp[digits[i-1]],tmpstr);
return tmpstr;
}
vector<string> combin(vector<string> &str1, vector<string> &str2)
{
vector<string> retvec;
for (int i=0; i<str1.size(); i++)
for (int j=0; j<str2.size(); j++)
retvec.push_back(str1[i]+str2[j]);
return retvec;
}
};
(2)队列方法:广度遍历
方法概述:
利用数据结构中队列的“先进先出”的知识,采用实时更新队列的内容实现遍历。
步骤说明:
1.建立一个map哈希表;
2.新建一个队列;
3.将第一个字符串所对应的码表逐步进入到队列中;
4.出队操作,存储当前出队的string;
5.将此string与后一个字符串所对应的码表中每一个值相加并逐步进入到队列中;
6.最终队列中存储的即为所有情况的string
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> res;//用于输出向量
map<char, string> m = { {'2',"abc" },{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"} };//映射map哈希表
int size = digits.size();//输入字符串产长度
queue<string> que;//新建队列
//先将第一个元素对应的码表入队
for (int j = 0; j < m[digits[0]].size(); j++)
{
string str;
str.push_back(m[digits[0]][j]);//char转string
que.push(str);//string入队
}
string s;//用于存储队头元素
for (int i = 1; i < size; i++)
{
int length = que.size();//当前队列长度
while (length--)
{
for (int j = 0; j < m[digits[i]].size(); j++)
{
s = que.front();
s = s + m[digits[i]][j];//队头元素加上新元素
que.push(s);//入队
}
que.pop();//队头出队
}
}
while (!que.empty())
{
res.push_back(que.front());//队头元素存储至res
que.pop();//队头出队
}
return res;//返回
}
};
作者:su-ge
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/c-dui-lie-jian-dan-shi-xian-yi-dong-by-su-ge/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。