给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
扫描输入字符串,每扫描一位就确定全部结果字符串中对应位置的字符。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> number={"000","111","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> result;
if(digits.size()==0) return result;
string res[400][4];
int i,j,sum_s=1,num,t;
for(i=0;i<digits.size();i++)
{
sum_s*=number[digits[i]-'0'].size();//总数
}
int n1=sum_s,n2=1;
for(i=0;i<digits.size();i++)
{
num=digits[i]-'0';//某位数字
n2*=number[num].size();
t=sum_s/n2;//重复次数
int k=0;//第几个字符串
for(int m=0;m<sum_s/n1;m++){
for(j=0;j<number[num].size();j++)
{
cout<<number[num][j];
for(int n=0;n<t;n++)
{
res[k++][i]=number[num][j];
}
}
}
n1/=number[num].size();
}
string re;
for(i=0;i<sum_s;i++)
{
re="";
for(j=0;j<digits.size();j++)
{
re=re+res[i][j];
}
result.push_back(re);
}
return result;
}
};