1. 程式人生 > 實用技巧 >3.2 電話號碼對應的英語單詞

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

如果查詢的次數過多的話,可以直接將字典裡面所有的單詞都按照上述的這種轉換規則轉換成為數字,並且儲存到檔案之中,使之成為另一本數字辭典,然後,通過對這個電話號碼進行查詢的方法從而得到結果。