【题目描述】
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/?favorite=2cktkvj
【示例】
【代码】天方
import java.util.*;
// 2022-12-16
class Solution {
public List<String> letterCombinations(String digits) {
// 记录最后的结果
List<String> list = new ArrayList<>();
if (digits.length() == 0) {
return list;
}
Map<Character, String> map = new HashMap<>(){
{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}
};
// 记录组合的字符
StringBuilder sb = new StringBuilder();
dfs(map, digits, 0, list, sb);
System.out.println(list.toString());
return list;
}
// 回溯递归
private void dfs(Map<Character, String> map, String digits, int dept, List<String> list, StringBuilder sb) {
if (dept == digits.length()){
list.add(sb.toString());
} else {
// 根据深度获取相应字符
char c = digits.charAt(dept);
// 获取数字对应的字符串
String str = map.get(c);
// 获取当前数字锁对应的字符的长度
int len = str.length();
// 遍历
for (int i = 0; i < len; i++) {
sb.append(str.charAt(i));
// 递归
dfs(map, digits, dept + 1, list, sb);
// 减zhi
sb.deleteCharAt(dept);
}
}
}
}
public class Main{
public static void main(String[] args) {
String digits = "23";
new Solution().letterCombinations(digits);
}
}