0
点赞
收藏
分享

微信扫一扫

【LeeCode】17. 电话号码的字母组合

Ad大成 2022-12-17 阅读 157

【题目描述】

给定一个仅包含数字 ​​2-9​​ 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

【LeeCode】17. 电话号码的字母组合_git

​​https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/?favorite=2cktkvj​​


【示例】

【LeeCode】17. 电话号码的字母组合_List_02

【代码】​​天方​​

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);
}
}



举报

相关推荐

0 条评论