LeetCode No17. 电话号码的字母组合
题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
思路
其实就是一个全排列的问题,数据范围也不大,打表记好每个数字对应的字符,直接一波回溯即可。
AC代码
点击查看代码
class Solution {
List<String> list;
char[] chars;
StringBuffer sb;
Map<Character, Character[]> map = new HashMap<>(){{
put('2', new Character[]{'a', 'b', 'c'});
put('3', new Character[]{'d', 'e', 'f'});
put('4', new Character[]{'g', 'h', 'i'});
put('5', new Character[]{'j', 'k', 'l'});
put('6', new Character[]{'m', 'n', 'o'});
put('7', new Character[]{'p', 'q', 'r', 's'});
put('8', new Character[]{'t', 'u', 'v'});
put('9', new Character[]{'w', 'x', 'y', 'z'});
}};
private void DFS(int index) {
if( index==chars.length) {
list.add(sb.toString());
return ;
}
Character[] ch = map.get(chars[index]);
for(char cha: ch) {
sb.append(cha);
DFS(index+1);
sb.deleteCharAt(sb.length()-1);
}
}
public List<String> letterCombinations(String digits) {
list = new ArrayList<>();
if(digits.length()==0) {
return list;
}
chars = digits.toCharArray();
sb = new StringBuffer();
DFS(0);
return list;
}
}
低调做人,高调做事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-04-21 Kattis之旅——Eight Queens