leetcode:letter-combinations-of-a-phone-number

题目描述:

给出一个仅包含数字的字符串,给出所有可能的字母组合。
数字到字母的映射方式如下:(就像电话上数字和字母的映射一样)

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

解题思路:

  1. 首先我们确实一下是用递归来求解
  2. 然后我们需要完成数字键盘与字母之间的映射,并将结果放入 list 中
  3. 最后,通过递归的形式来求解

举例:
2 -> a,b,c
3 -> d,e,f
4 -> g,h,i

遍历的先后顺序为:
adg, adh, adi,
aeg, aeh, aei,
afg, afh, afi,
bdg, bdh, bdi,
beg, beh, bei,
。。。。

代码如下:

    ArrayList<String> resultList = new ArrayList<>();
    public ArrayList<String> letterCombinations(String digits) {
        String tempRes = "";
        char [] dig = digits.toCharArray();
        ArrayList<char[]> list = new ArrayList<>();

	// 完成数字与字母的映射转换并将结果放入 list 集合
        char [] two = {'a', 'b', 'c'};
        char [] three = {'d', 'e', 'f'};
        char [] four = {'g', 'h', 'i'};
        char [] five = {'j', 'k', 'l'};
        char [] six = {'m', 'n', 'o'};
        char [] seven = {'p', 'q', 'r','s'};
        char [] eight = {'t', 'u', 'v'};
        char [] nine = {'w', 'x', 'y','z'};
        list.add(two);list.add(three);
        list.add(four);list.add(five);
        list.add(six);list.add(seven);
        list.add(eight);list.add(nine);

        int strlen = dig.length;
        recursion(0, dig, list, tempRes);

        return resultList;
    }

   // 递归函数
    private void recursion(int curlen, char [] dig, ArrayList<char[]> list, String tempRes){
	
	// 递归结束条件
        if(curlen == dig.length){
            resultList.add(tempRes);
            return;
        }

	// 每次取出当前 curlen 对应的数字,再由数字取出对应的字符集,再通过递归的形式每次取出当前字符集的一个字符进行拼接
        for(int i = 0; i < list.get(dig[curlen] - '2').length; i++){
            recursion(curlen + 1, dig, list, tempRes + String.valueOf(list.get(dig[curlen] - '2')[i]));
        }
    }

转载于:https://my.oschina.net/happywe/blog/3097464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值