17、电话号码的字母组合

问题描述

在这里插入图片描述

问题分析

分析题目,递归虽然简单,但是消耗了额外的空间,故还是选择遍历的办法。思路如下:

每一次添加一个字母,把之前已经添加过的作为一个整体,再和新添加的字母组合(注意删去低维元素)。


解法:

Java代码

class Solution {
    public List<String> letterCombinations(String digits) {
        String[] repository = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        List<String> result = new ArrayList<String>();

        if (digits.length() == 0){return result;}


        //处理第一个数字
        int cur = Integer.parseInt(digits.substring(0, 1));
        for (int i = 0; i < repository[cur - 2].length(); i++) {
            result.add(repository[cur - 2].substring(i, i+1));
        }

        //处理遍历之后的数字
        for (int i = 1; i < digits.length(); i++) {
            cur = Integer.parseInt(digits.substring(i, i+1));
            int len = result.size();
            for (int j = 0; j < len; j++) {
                for (int k = 1; k < repository[cur - 2].length(); k++) {
                    result.add(result.get(j) + repository[cur - 2].substring(k, k+1));
                }
                result.set(j, result.get(j) + repository[cur - 2].substring(0, 1));//去掉低维组合
            }
        }


        return result;
   
        
    }
}

结果分析

以上代码的执行结果:

执行时间内存消耗
2ms35.4MB

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值