import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param digits string字符串
     * @return string字符串一维数组
     */
    public static LinkedList<String> result = new LinkedList<>();
    public String[] letterCombinations (String digits) {
        // write code here
        HashMap<Character, String> map = new HashMap<>();
        map.put('2', "abc");
        map.put('3', "def");
        map.put('4', "ghi");
        map.put('5', "jkl");
        map.put('6', "mno");
        map.put('7', "pqrs");
        map.put('8', "tuv");
        map.put('9', "wxyz");

        LinkedList<String> linkedList = new LinkedList<>();
        char[] chars = digits.toCharArray();
        Arrays.sort(chars);
        for (char aChar : chars) {
            linkedList.add(map.get(aChar));
        }
        search(linkedList, 0, new StringBuffer());
        String[] strings = new String[result.size()];
        result.toArray(strings);
        return strings;
    }

    public void search(LinkedList<String> linkedList, int index,
                       StringBuffer stringBuffer) {
        if (index == linkedList.size()) {
            result.add(stringBuffer.toString());
            return;
        }
        String string = linkedList.get(index);
        for (int i = 0; i < string.length(); i++) {
            stringBuffer.append(string.charAt(i));
            search(linkedList, index + 1, stringBuffer);
            stringBuffer.deleteCharAt(stringBuffer.length() - 1);
        }
    }
}

本题主要考察的知识点是递归,哈希表,所用编程语言是java。

我们首先将每个字符对应的字符串存储下来,然后根据目标仅包含数字 2-9 的字符串 digits中的每个字符对应的字符串添加到集合中,然后每个字符串我们任意取一个字符就是一种组合,所有组合就是我们的字符取法。