电话号码的字母组合(Letter Combinations of a Phone Number)java

电话号码的字母组合(Letter Combinations of a Phone Number)

题干


给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

(数字和英文字母的映射和手机电话相同,无图)

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

分析

该题呢,我使用的是回溯法。我们先由输入的数字组合得到相应的字符组合,然后以第一个字符组合开始向下一个字符组合递归回溯。终止条件就是当回溯到最后一个字符组合。

代码


     public List<String> letterCombinations(String digits) {
        List<String> strings = new ArrayList<>();
        if (digits.length() == 0) {
            return strings;
        }
        String[] dict = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        //选中的字母组合
        String[] arr = new String[digits.length()];
        for (int i = 0; i < digits.length(); i++) {
            arr[i] = dict[digits.charAt(i) - '0' - 2];
        }
        int startStr = 0;//循环下标
        group(arr, startStr, "",strings);
        return strings;
    }

    private static String group(String[] arr, int startStr, String str, List<String> strings) {
        char[] chars1 = arr[startStr].toCharArray();
        for (int j = 0; j < chars1.length; j++) {
            if (startStr == arr.length - 1) {
                strings.add(str + chars1[j]);
            } else {
                //startStr+1:遍历下一个字符组合;str + chars1[j]:拼接当前遍历的字符
                group(arr, startStr+1, str + chars1[j],strings);
            }
        }
        return str;
    }


运行结果

运行结果

猜你喜欢

转载自blog.csdn.net/zhangjingao/article/details/81267704