DFS深度遍历+HashMap
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
Map<Character, String> table=new HashMap(){ //创建对应key value键值对
{
put('2',"abc");
put('3',"def");
put('4',"ghi");
put('5',"jkl");
put('6',"mno");
put('7',"pqrs");
put('8',"tuv");
put('9',"wxyz");
}
};
List<String> res=new ArrayList<>();
if(digits == "") return res;
func(res, "", digits, table, 0);
return res;
}
void func(List<String> res, String str, String digits, Map<Character, String> m, int k){
//传参:返回值,每个相应字符串,原字符串,键值对表,对应第几个数字
if(str.length() == digits.length()){ //二值相等则为一相应字符串
res.add(str);
return;
}
String tmp = m.get(digits.charAt(k)); //得到对应数字的字符串
for(int w=0;w<tmp.length();w++){
str += tmp.charAt(w); //将每个字符加到相应字符串中
func(res, str, digits, m, k+1); //递归
str=str.substring(0,str.length()-1); //回溯
}
return ;
}