给定一个仅包含数字 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'] 的一个数字。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number
思路:回溯算法
java 代码
class Solution {
Map<Character,String> digitMap = new HashMap<>();
public List<String> letterCombinations(String digits) {
digitMap.put('2',"abc");
digitMap.put('3',"def");
digitMap.put('4',"ghi");
digitMap.put('5',"jkl");
digitMap.put('6',"mno");
digitMap.put('7',"pqrs");
digitMap.put('8',"tuv");
digitMap.put('9',"wxyz");
List<String> result = new LinkedList<>();
if(digits.isEmpty()) {
return result;
}
backtrack(digits,digitMap,0,new StringBuilder(),result);
return result;
}
public void backtrack(String digits,Map<Character,String> digitMap,int index,StringBuilder stringBuilder, List<String> result){
if (index == digits.length()) {
result.add(stringBuilder.toString());
return;
}
String subStr = digitMap.get(digits.charAt(index));
for (int i=0;i<subStr.length();i++) {
stringBuilder.append(subStr.charAt(i));
backtrack(digits,digitMap,index+1,stringBuilder,result);
stringBuilder.deleteCharAt(stringBuilder.length()-1);
}
}
}