给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
思路:先把这个电话号码与对应字母的映射写到一个hashmap里,字符串的形式。
然后递归,当前拼接好的字符串,未到的数字字符串,答案,Map.
递归结束的条件是未到的数字字符串长度为0,这是把拼接好的字符串加入到答案中。如果没有达到结束,就把未到的数字字符串的第一个数字对应的map里的字符串读出,遍历这个字符串,加入到拼接中,完成下一步递归。
class Solution {
public void process(String combine,String digits,List<String> list,HashMap<String,String> map){
if(digits.length()==0)
list.add(combine);
else{
String cur=digits.substring(0,1);
String duiying=map.get(cur);
for(int j=0;j<duiying.length();j++){
String letter=duiying.substring(j,j+1);
process(combine+letter,digits.substring(1),list,map);
}
}
}
public List<String> letterCombinations(String digits) {
HashMap<String,String> map=new HashMap<>();
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");
List<String> list=new ArrayList<>();
if(digits==null||digits.length()==0)
return list;
process("",digits,list,map);
return list;
}
}