1.题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2.示例
1)示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
2)示例 2:
输入:digits = “”
输出:[]
3)示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
3.分析
其实本质上就是一道比较简单的模拟题,但是我最开始写的时候定义数组int dict[10]=[0,3,3,3,3,3,4,3,4]一直报错:expected variable name or ‘this’ in lambda capture list,不知道为啥,而且最后提交时候忘记了可能是空字符串的情况
4.代码
class Solution {
public:
vector<string> ans;
void get_ans(int pos,string digits,vector<string> dic,string s){
if(pos==digits.size()){
ans.push_back(s);
return;
}
for(int i=0;i<dic[digits[pos]-'2'].size();i++)
get_ans(pos+1,digits,dic,s+dic[digits[pos]-'2'][i]);
}
vector<string> letterCombinations(string digits) {
vector<string> dic;
int left=0,right=2;
if(digits.size()==0) return ans;
for(int i=2;i<=9;i++)
{
string test="";
for(int j=left;j<=right;j++)
test+='a'+j;
if(i==6||i==8) left+=3,right+=4;
else{
if(i==7) left+=4,right+=3;
else left+=3,right+=3;
}
dic.push_back(test);
}
get_ans(0,digits,dic,"");
return ans;
}
};