【Leetcode】Letter Combinations of a Phone Number

来源:互联网 发布:移动数据闲时流量包 编辑:程序博客网 时间:2024/05/18 00:22

Given a digit string, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below.

Input:Digit string "23"Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.

题意:根据输入的字符串,返回其各个字符对应手机上的字符组合。

这题关键的点主要有:

1)当输入为空字符串,则输出的vector也要包含一个空字符串。

2)输入的字符范围介于'2'--'9'之间,假设输入字符串长度为n,则要新建一个长度为n+1的字符串,并将其第n+1位置为'\0',然后将其1至n位按对应的字符插入即可,此处用到了递归调用的过程。

class Solution {public:    vector<string> letterCombinations(string digits) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        vector<string> res;        if(digits=="")        {               res.push_back("");            return res;        }        int length=digits.size();        char *letter=new char[length+1];        letter[length]='\0';        combination(res,digits,letter,0,length);        return res;    }        void combination(vector<string> &res,string digits,char *letter,int index,int length)    {        if(index==length)            res.push_back(letter);        switch(digits[index])        {            case '2':                for(int i=0;i<3;i++)                {                    letter[index]='a'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '3':                for(int i=0;i<3;i++)                {                    letter[index]='d'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '4':                for(int i=0;i<3;i++)                {                    letter[index]='g'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '5':                for(int i=0;i<3;i++)                {                    letter[index]='j'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '6':                for(int i=0;i<3;i++)                {                    letter[index]='m'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '7':                for(int i=0;i<4;i++)                {                    letter[index]='p'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '8':                for(int i=0;i<3;i++)                {                    letter[index]='t'+i;                    combination(res,digits,letter,index+1,length);                }                break;            case '9':                for(int i=0;i<4;i++)                {                    letter[index]='w'+i;                    combination(res,digits,letter,index+1,length);                }                break;            default:                break;        }    }};


原创粉丝点击