首页 > 其他分享 >【LeeCode】17. 电话号码的字母组合

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

时间:2022-12-17 14:37:18浏览次数:76  
标签:digits String 17 dept list put LeeCode 字母组合 sb

【题目描述】

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

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

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

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


【示例】

【LeeCode】17. 电话号码的字母组合_git_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);
}
}



标签:digits,String,17,dept,list,put,LeeCode,字母组合,sb
From: https://blog.51cto.com/u_13682316/5949785

相关文章