题解 | #牛名生成器#
牛名生成器
https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb
知识点
哈希,回溯
解题思路
使用递归来解决这个问题。首先,定义一个映射表,将数字与字母对应起来。然后,使用递归函数来生成所有可能的组合。
Java题解
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param digits string字符串 * @return string字符串一维数组 */ private static final Map<Character, String> digitToLetters = new HashMap<Character, String>() {{ put('2', "abc"); put('3', "def"); put('4', "ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz"); }}; public static String[] letterCombinations(String digits) { if (digits == null || digits.length() == 0) { return new String[0]; } List<String> combinations = new ArrayList<>(); backtrack(combinations, digits, 0, new StringBuilder()); return combinations.toArray(new String[0]); } private static void backtrack(List<String> combinations, String digits, int index, StringBuilder current) { if (index == digits.length()) { combinations.add(current.toString()); return; } char digit = digits.charAt(index); String letters = digitToLetters.get(digit); for (char letter : letters.toCharArray()) { current.append(letter); backtrack(combinations, digits, index + 1, current); current.deleteCharAt(current.length() - 1); } } }