电话号码的字母组合

leetCode-17(电话号码的字母组合问题)

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

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

img

示例 1:

1
2
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

1
2
输入:digits = ""
输出:[]

示例 3:

1
2
输入:digits = "2"
输出:["a","b","c"]

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public List<String> letterCombinations(String digits) {
List<String> list = new ArrayList<String>();
if (digits.length()==0) return list;
Map<Character,String> map = new HashMap<>();
map.put('0',"");
map.put('1'," ");
map.put('2',"abc");
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
select(digits,map,new StringBuffer(),0,list);
return list;
}
public void select(String digits,Map<Character,String> map,StringBuffer stringBuffer,int index,List<String> list){
if (index==digits.length()){
list.add(stringBuffer.toString());
}else{
char c = digits.charAt(index);
String s = map.get(c);
int len = s.length();
for (int i = 0;i<len;i++){
stringBuffer.append(s.charAt(i));
select(digits,map,stringBuffer,index+1,list);
stringBuffer.deleteCharAt(index);
}
}
}
}

回溯法

会回来的~~


电话号码的字母组合
http://example.com/2022/08/12/电话号码的字母组合/
作者
zlw
发布于
2022年8月12日
许可协议