目录
电话号码的字母组合
描述
示例 1
示例 2
示例 3
提示
方法:回溯
描述
给定一个仅包含数字 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'] 的一个数字
方法:回溯
class Solution {
public List<String> res=new ArrayList<>();
public StringBuffer str=new StringBuffer();
public List<String> letterCombinations(String digits) {
if (digits.length()>0){
char cur=digits.charAt(0);
String substr=digits.substring(1,digits.length());
if ('2'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('a'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('3'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('d'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('4'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('g'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('5'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('j'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('6'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('m'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('7'==cur){
for (int i = 0; i < 4; i++) {
str.append((char)('p'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('8'==cur){
for (int i = 0; i < 3; i++) {
str.append((char)('t'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}else if ('9'==cur){
for (int i = 0; i < 4; i++) {
str.append((char)('w'+i));//加入
letterCombinations(substr);
str.deleteCharAt(str.length()-1);//回溯
}
}
}else{
if (str.length()==0) return res;
else res.add(str.toString());
}
return res;
}
}
|