题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
提示:
0 <= digits.length <= 4
digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
思路:
1.遍历字符串
2.遍历到第i个字母时,首先判定属于哪个号码,对应哪些字母,把原本已经存放在队列的所有字符串取出,并对每个字符串分别加上对应的字母,假设有3个字母,队列有10个字符串,那么就会有30个11字符长度的字符串,再把这30个字符串压入队列,然后i++,继续下个循环。
3.得到最终队列时,再转为vector返回就好了。
class Solution {
public:
void Init_table(vector> &table)
{
table.push_back({"a","b","c"});
table.push_back({"d","e","f"});
table.push_back({"g","h","i"});
table.push_back({"j","k","l"});
table.push_back({"m","n","o"});
table.push_back({"p","q","r","s"});
table.push_back({"t","u","v"});
table.push_back({"w","x","y","z"});
}
vector letterCombinations(string digits) {
int length=digits.size();
if(length==0)
{
return vector();
}
vector> table;
Init_table(table);
queue ans;
//queue com_ans;
int digit=digits[0]-'0'-2;
int char_len=table[digit].size();
for(int i=0;i
ans.push(table[digit][i]);
}
for(int i=1;i
digit=digits[i]-'0'-2;
char_len=table[digit].size();
vector com_ans;
while(!ans.empty())
{
string f=ans.front();
ans.pop();
com_ans.push_back(f);
}
int len=com_ans.size();
for(int j=0;j
for(int t=0;t
string new_one=com_ans[t]+table[digit][j];
ans.push(new_one);
}
}
}
vector final_ans;
while(!ans.empty())
{
string f=ans.front();
ans.pop();
final_ans.push_back(f);
}
return final_ans;
}
};



