解题思路:排列组合+递归求解,递归每一位,当递归到最后一位的时候则添加字符串
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.