17、电话号码的字母组合

问题描述

17、电话号码的字母组合_第1张图片

问题分析

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

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


解法:

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;
   
        
    }
}

结果分析

以上代码的执行结果:

执行时间 内存消耗
2ms 35.4MB

17、电话号码的字母组合_第2张图片

你可能感兴趣的:(LeetCode)