3.2 电话号码对应的英语单词
3.2 电话号码对应的英语单词
3.2.1 从字母组合中找到一个有意义的单词来表述一个电话号码,例如"computer" --> 26678837
利用递归进行 dfs+剪枝
import java.util.*;
import java.util.Set.*;
class Test{
public static void main(String[] args) {
// 自定义辞典
Set<String> dic = new HashSet<String>();
dic.add("macbookair");
dic.add("macbookpro");
dic.add("macbookmin");
dic.add("abcdefghij");
char[][] c = new char[][]{{' ',' ',' ',' '},{' ',' ',' ',' '},{'a','b','c',' '},{'d','e','f',' '},{'g','h','i',' '},{'j','k','l',' '},{'m','n','o',' '},{'p','q','r','s'},{'t','u','v',' '},{'w','x','y','z'}};
String s = "";
String num = "";
dfs(s,num,c,dic);
}
public static void dfs(String s,String num,char[][] c,Set<String> dic){
if(s.length() > 10) return;
if(s.length() == 10){
if(dic.contains(s)) {
System.out.println(s);
System.out.println(num);
}
return;
}
for(int i = 0;i<c.length;i++)
for(int j = 0;j<c[i].length;j++){
if(c[i][j] == ' ') continue;
s += c[i][j];
num += i;
dfs(s,num,c,dic);
s.substring(0,s.length()-1);
num.substring(0,num.length()-1);
}
}
}
3.2.2 对于一个电话号码,是否可以通过一个单词来代表?怎样才是最快的方法。
Answer
如果查询的次数过多的话,可以直接将字典里面所有的单词都按照上述的这种转换规则转换成为数字,并且存储到文件之中,使之成为另一本数字辞典,然后,通过对这个电话号码进行查询的方法从而得到结果。
Saying Less Doing More