LeetCode 17 Letter Combinations of a Phone Number(C,C++,Java,Python)

Problem:

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.

Solution:

递归枚举即可。

题目大意:

给定一个数字字符串,在手机按键上按下这些数字,要求得出所有可能的字符串组合,每个字可能会有的字符有以下这些:
map=[" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]

解题思路:

同Solution

Java源代码(用时253ms):

public class Solution {
    char[][] map={" ".toCharArray(), "".toCharArray(), 
    "abc".toCharArray(), "def".toCharArray(), "ghi".toCharArray(), 
    "jkl".toCharArray(), "mno".toCharArray(), "pqrs".toCharArray(), 
    "tuv".toCharArray(), "wxyz".toCharArray()};
    int length=0;
    public List<String> letterCombinations(String digits) {
        List<String> res = new ArrayList<String>();
        length=digits.length();
        if(length==0)return res;
        char[] tmp = new char[length];
        char[] newdigits = digits.toCharArray();
        getLetterCom(res,0,newdigits,tmp);
        return res;
    }
    private void getLetterCom(List<String> res,int index,char[] digits,char[] tmp){
        if(index>=length){
            String letters = new String(tmp);
            res.add(letters);
            return;
        }
        int digit=digits[index]-'0';
        for(int i=0;i<map[digit].length;i++){
            tmp[index]=map[digit][i];
            getLetterCom(res,index+1,digits,tmp);
        }
    }
}

C语言源代码(用时1ms):

void getLetterCom(char** res,char* digits,char* tmp,int index,char map[10][5],int *top){
    int i,digit=digits[index]-'0';
	char* letters;
    if(digits[index]==0){
        letters=(char*)malloc(sizeof(char)*index);
        tmp[index]=0;
		strcpy(letters,tmp);
        res[*top]=letters;
		(*top)++;
        return;
    }
    for(i=0;map[digit][i];i++){
        tmp[index]=map[digit][i];
        getLetterCom(res,digits,tmp,index+1,map,top);
    }
}
char** letterCombinations(char* digits, int* returnSize) {
	 char map[10][5]={" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
     char** res,*tmp;
     int num=1,length=0,top=0;
     while(digits[length]){
         if(digits[length]=='0' || digits[length]=='1')continue;
         else if(digits[length]=='7' || digits[length]=='9')num*=4;
         else num*=3;
         length++;
     }
     res=(char**)malloc(sizeof(char*)*num);
     if(length==0){
         *returnSize=0;
         return res;
     }
     tmp=(char*)malloc(sizeof(char)*length);
     getLetterCom(res,digits,tmp,0,map,&top);
     *returnSize=top;
     return res;
}

C++源代码(用时3ms):

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> res;
        length=digits.size();
        if(length==0)return res;
        char* tmp=(char*)malloc(sizeof(char)*(length+1));
        getLetterCom(res,0,digits,tmp);
        return res;
    }
private:
    char map[10][5]={" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    int top=0,length=0;
    void getLetterCom(vector<string>& res,int index,string digits,char* tmp){
        if(index>=length){
            tmp[index]=0;
            string letters=string(tmp);
            res.push_back(letters);
            return;
        }
        int digit=digits[index]-'0';
        for(int i=0;map[digit][i];i++){
            tmp[index]=map[digit][i];
            getLetterCom(res,index+1,digits,tmp);
        }
    }
};

Python源代码(用时69ms):

class Solution:
    map=[" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]
    length=0;res=[]
    # @param {string} digits
    # @return {string[]}
    def letterCombinations(self, digits):
        self.length=len(digits)
        self.res=[]
        if self.length==0:return self.res;
        tmp=['' for i in range(self.length)]
        self.getLetterCom(0,digits,tmp)
        return self.res
    def getLetterCom(self,index,digits,tmp):
        if index>=self.length:
            letters=''.join(tmp)
            self.res.append(letters)
            return
        digit=ord(digits[index])-ord('0')
        for i in range(len(self.map[digit])):
            tmp[index]=self.map[digit][i]
            self.getLetterCom(index+1,digits,tmp)


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值