java实现:
import java.util.ArrayList; import java.util.List; public class Telphone { /** * 保存每个数字对应的字母序列 */ static String[] c = new String[] { "", // 0 "", // 1 "abc", // 2 "def", // 3 "ghi", // 4 "jkl", // 5 "mno", // 6 "pqrs", // 7 "tuv", // 8 "wxyz" // 9 }; /** * 保存每个数字对应的字母序列的长度 */ static int[] total = { 0, 0, 3, 3, 3, 3, 3, 4, 3, 4 }; public static void main(String[] args) { List<String> ret = find("012"); for (String s : ret) { System.out.println(s); } } public static List<String> find(String s) { ArrayList<String> ret = new ArrayList<String>(); if (s == null) return ret; ret.add(""); for (char ch : s.toCharArray()) { int len = total[ch - '0'];// 获得对应的字母序列长度 int size = ret.size();// ret当前的size for (int i = 0; i < len; i++) { for (int j = 0; j < size; j++) { ret.add(ret.get(j) + c[ch - '0'].charAt(i)); } } if (size < ret.size())// 为了避免0,1时,下一条语句会导致ret.size==0 ret = new ArrayList<String>(ret.subList(size, ret.size()));// 保留新添加的元素,即删除0-size-1的元素 } return ret; } }得到对应的字符串后,再进行查询,判断是不是单词,实用Map词典的话,可以O(1)时间实现判断;
原文地址:http://blog.csdn.net/u010786672/article/details/45290571