leetcode:电话号码的字母组合

题目:

给定一个仅包含数字 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;
}
 

猜你喜欢

转载自blog.csdn.net/xiaoqingqing521/article/details/81583039