题目地址

解题思路:排列组合+递归求解,递归每一位,当递归到最后一位的时候则添加字符串

class Solution {

    Map<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");
    }

    List<String> ans = new ArrayList();

    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) return new ArrayList();

        // 处理的标识位置
        int index = 0;
        // 动态构造字符串
        StringBuilder sb = new StringBuilder();
        // 递归处理
        doFunction(digits, sb, index);

        return ans;

    }

    void doFunction(String digits, StringBuilder sb, int index) {
        if (index == digits.length()) {
            ans.add(sb.toString());
            return;
        }
        // 处理第几个输入数字
        char ch = digits.charAt(index);
        char[] ss = map.get(ch).toCharArray();
        for (char c : ss) {
            sb.append(c);
            // 处理下一个字符
            doFunction(digits, sb, index + 1);
            sb.deleteCharAt(sb.length() - 1);
        }
    }
}

Q.E.D.


每一个平凡的日常都是连续的奇迹