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中的每个字符对应的字符串添加到集合中,然后每个字符串我们任意取一个字符就是一种组合,所有组合就是我们的字符取法。