题目:
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
char num[8][4]={{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},{'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}}; /将电话按键定义为一个char型二维数组/
int a,b;
cout<<"please input:"<<endl;
cin>>a>>b; /输入按键中任意两个数/
cout<<"[";
/因为不同数字代表的字母个数不同,有的是代表三个字母,有的是代表四个字母,因此分类型进行讨论/
if((a==2||a==3||a==4||a==5||a==6||a==8)&&(b==2||b==3||b==4||b==5||b==6||b==8)) /当两个数所做代表的都是3个字母/
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
/是否要在最后输出“,”,如果是已经循环到二维数组的最后,则输出",",否则不用输出
if(j==2&&i==2)
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\""; /注意引号的输出格式/
}
else
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\""<<",";
}
}
}
}
if((a==2||a==3||a==4||a==5||a==6||a==8)&&(b==7||b==9)) /当第一个数代表三个字母,第二个数代表四个字母/
{
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
if(j==3&&i==2)
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\"";
}
else
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\""<<",";
}
}
}
}
if((a==7||a==9)&&(b==2||b==3||b==4||b==5||b==6||b==8)) /当第一个数代表四个字母,第二个数代表三个字母/
{
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
if(j==2&&i==3)
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\"";
}
else
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\""<<",";
}
}
}
}
if((a==7||a==9)&&(b==7||b==9)) /当两个数都代表四个字母/
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(j==3&&i==3)
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\"";
}
else
{
cout<<"\""<<num[a-2][i]<<num[b-2][j]<<"\""<<",";
}
}
}
}
cout<<"]";
return 0;
}