一、知识点:
哈希、递归、遍历
二、文字分析:
- 创建一个结果列表
result,用于存储所有可能的牛名组合。 - 创建一个字符串
curr,用于构建当前的牛名组合。 - 使用递归函数
backtrack生成所有可能的组合:如果 curr 的长度等于 digits 的长度,说明已经完成一种组合,将 curr 添加到结果列表中。如果 curr 的长度小于 digits 的长度,取出当前数字对应的字母串 letters。遍历 letters 的每个字符 ch,将 ch 连接到 curr 的末尾,并调用递归函数 backtrack。在递归函数结束后,将 curr 的末尾字符移除,回溯到上一个状态。 - 返回结果列表。
三、编程语言:
java
四、正确代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Solution {
private static Map<Character, String> digitToLetters = new HashMap<>();
static {
digitToLetters.put('2', "abc");
digitToLetters.put('3', "def");
digitToLetters.put('4', "ghi");
digitToLetters.put('5', "jkl");
digitToLetters.put('6', "mno");
digitToLetters.put('7', "pqrs");
digitToLetters.put('8', "tuv");
digitToLetters.put('9', "wxyz");
}
public String[] letterCombinations(String digits) {
List<String> result = new ArrayList<>();
if (digits.length() == 0) {
return result.toArray(new String[0]);
}
backtrack(digits, 0, new StringBuilder(), result);
return result.toArray(new String[0]);
}
private void backtrack(String digits, int index, StringBuilder curr, List<String> result) {
if (curr.length() == digits.length()) {
result.add(curr.toString());
return;
}
char digit = digits.charAt(index);
String letters = digitToLetters.get(digit);
for (char ch : letters.toCharArray()) {
curr.append(ch);
backtrack(digits, index + 1, curr, result);
curr.deleteCharAt(curr.length() - 1);
}
}
}

京公网安备 11010502036488号