- 題目描述:電話號碼的字母組合
給定一個僅包含數字 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)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。