题目描述:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
我的解题:
参考了大神的方法,使用了队列,相当于广度优先搜索
没有使用map,直接利用数字的ASCII码计算下标
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> button={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> result;
int length=digits.size();//输入数字的位数
if(length==0) return result;
queue<string> q;
for(int i=0;i<button[digits[0]-'2'].size();i++){
string s="";
s+=button[digits[0]-'2'][i];
q.push(s);
}
string s;
for(int i=1;i<length;i++){
int a=q.size();
while(a--){
for(int j=0;j<button[digits[i]-'2'].size();j++){
s=q.front();
s+=button[digits[i]-'2'][j];
q.push(s);
}
q.pop();
}
}
while(!q.empty()){
result.push_back(q.front());
q.pop();
}
return result;
}
};