LeetCode17 Letter Combinations of a Phone Number(Python and Java)

LeetCode17

Letter Combinations of a Phone Number

题目描述:

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”].

思路:
想要找出所有可能性的字母组合,例如要找出三个数字的所有字母组合,
那么,需要找出三个数字中第一个数字对应的字母,
依次遍历这些字母与剩下的两位数字组成的字母组合进行组合,依次类推。

以下使用python代码和Java代码实现
python

arr = [" ","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
class Solution(object):
    result = []
    def findCombination(self, digits, index, s):
        # 当输入为空时,返回空
        if not digits:
            return self.result
        # 递归条件
        if index == len(digits):
            self.result.append(s)
            print self.result
            return self.result
        # 获取从第一位开始输入的数字,若输入的digits为“321”,那么当index为0是,c=3
        c = digits[index]
        # 将c转换成ASCII值
        c = ord(c)
        # 获取c对应的键盘数字的字母,例如c=3,那么对应的键盘字母letters为def
        letters = arr[c - ord('0')]
        #遍历letters
        for i in range(len(letters)):
            print s+letters[i]
            # 递归调用自己,除去index前面的数字所对应的字母,遍历后衔接index后面已经排列好的字母进行组合
            self.findCombination(digits, index + 1, s + letters[i])
    def letterCombinations(self, digits):
        # 传入用户输入digits,index初始化为0,也就是从digits第一位开始,初始化字符串为空
        self.findCombination(digits,0,"")
        return self.result

if __name__ == '__main__':
    test = Solution()
    result = test.letterCombinations("234")
    print "result:"+str(result)

Java

import java.util.*;

public class Letter_Combinationsof_a_Phone_Number {
//    定义全局静态常量用于存放电话数字键对应的字母
    public static final String[] arr ={""," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//    定义存放结果的数组
    ArrayList<String> list = new ArrayList<>();
    public List<String> letterCombinations(String digits) {
        if (digits.trim().length() == 0){
            return list;
        }
        return findCombination(digits,0,"");
    }
//    定义私有函数
//    参数意义:digits为用户输入的数字字符串,index为字符串的索引,list为返回的部分数字字符的结果
    private List<String> findCombination(String digits,int index,String s){
        if (index == digits.length()){
            list.add(s);
            return list;
        }
//        找出数字字符对应的ASCII值
        char c = digits.charAt(index);
//        找到该数字对应的键盘上的字母
        String letters = arr[c-'0'];
        System.out.println(letters);
//        遍历letters
        for (int i = 0;i<letters.length();i++){
//            与剩下的index-1位进行组合
            findCombination(digits,index + 1,s+letters.charAt(i));
        }
        return list;
    }
    public static void main(String[] args) {
       List list =  new Letter_Combinationsof_a_Phone_Number().letterCombinations("23");
       System.out.println("result:"+list);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值