知识点
哈希,回溯
解题思路
使用递归来解决这个问题。首先,定义一个映射表,将数字与字母对应起来。然后,使用递归函数来生成所有可能的组合。
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);
}
}
}



京公网安备 11010502036488号