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恢复到之前的状态,以便尝试下一个字母。
查看12道真题和解析