Java 题解 | #牛名生成器#
牛名生成器
https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param digits string字符串 * @return string字符串一维数组 */ private String[] nameMap = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; public String[] letterCombinations(String digits) { List<String> result = new ArrayList<>(); if (digits == null || digits.length() == 0) { return result.toArray(new String[0]); } backTracking("", 0, digits, result); return result.toArray(new String[0]); } private void backTracking(String prefix, int id, String digits, List<String> result) { if (id == digits.length()) { result.add(prefix); return; } int curNum = digits.charAt(id) - '0'; String name = nameMap[curNum]; for (char c : name.toCharArray()) { backTracking(prefix + c, id + 1, digits, result); } } }
编程语言是Java。
这段代码解决的问题是给定一个由数字组成的字符串,要求生成该数字串所对应的所有可能的字母组合。
这段代码主要考察了回溯算法。回溯算法是一种通过不断尝试各种可能性来解决问题的算法,通常用于求解组合、排列等问题。
该代码的文字解释如下:
backTracking
接受当前的字母组合前缀prefix
、当前处理的位置id
、输入的数字字符串digits
以及保存结果的列表result
。- 当
id
达到字符串长度时,将当前的prefix
加入到结果列表中,表示已经生成了一个完整的字母组合。否则,根据当前位置的数字,获取对应的字母串name
。 - 遍历
name
中的每个字母,在prefix
后添加该字母,并递归调用backTracking
来处理下一个位置。 - 在递归调用结束后,需要将
prefix
恢复到之前的状态,以便尝试下一个字母。