我解决了一个难题。我将尝试简要描述它,然后提问。
将电话号码映射到文本。例如: 101 - > 101,但501 - > J01,K01,L01(AFAIK)。
我们获得了9位数,需要生成所有组合,甚至是那些语法不正确的组合。
我创建了一个基本上像树一样成长的程序。当找到一个不是0或1的数字时,我们创建一个新的分支,其中包含已翻译的文本+一个可能的字母+其余的数字。
我通过每次遇到新的可翻译数字时创建一个新线程来解决它。
你认为这是一种不好的做法吗?可以更好地解决吗?
谢谢。
答案 0 :(得分:0)
为每种可能性创建一个线程似乎有些过分,你真正想要的是递归。试试这个:
String [] lookup = { "0", "1", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ" };
List<String> results = new ArrayList<String>();
void translatePhone(String phoneNumber, int position) {
int index = Integer.parseInt(phoneNumber.substring(position, position + 1));
for (int i = 0; i < lookup[index].length; i++) {
String xlated = phoneNumber.substring(0, position) + lookup[index].charAt(i) + phoneNumber.substring(position + 1);
if (position + 1 == phoneNumber.length) {
results.add(xlated);
} else {
translatePhone(xlated, position + 1);
}
}
}
致电translatePhone(phoneString, 0)
将其启动。返回results
后,应该包含所有结果。