📅  最后修改于: 2023-12-03 15:15:55.318000             🧑  作者: Mango
在电话键盘上,每个数字对应着不同的字母,这就是为什么我们可以使用电话号码打出单词。在这个项目中,我们将使用Java ArrayList来打印电话号码中所有可能的单词。
创建一个Java ArrayList对象,并将电话号码中每个数字对应的字母存储进ArrayList中,例如:
ArrayList<String> letterCombinations = new ArrayList<>();
letterCombinations.add("0");
letterCombinations.add("1");
letterCombinations.add("abc");
letterCombinations.add("def");
letterCombinations.add("ghi");
letterCombinations.add("jkl");
letterCombinations.add("mno");
letterCombinations.add("pqrs");
letterCombinations.add("tuv");
letterCombinations.add("wxyz");
定义一个递归函数来处理电话号码中的每个数字,并构建出所有可能的单词。我们可以用一个StringBuilder对象来存储正在构建的单词,一个ArrayList来存储所有已构建出的单词。
private void generateWords(String digits, StringBuilder sb, ArrayList<String> words, ArrayList<String> letterCombinations, int index) {
// 递归基准条件:已经处理完所有数字,将当前构建的单词加入到单词列表中
if (index == digits.length()) {
words.add(sb.toString());
return;
}
// 获取数字对应的字母
String letters = letterCombinations.get(Character.getNumericValue(digits.charAt(index)));
// 逐个处理数字对应的每个字母
for (int i = 0; i < letters.length(); i++) {
sb.append(letters.charAt(i));
generateWords(digits, sb, words, letterCombinations, index + 1);
sb.deleteCharAt(sb.length() - 1);
}
}
在主函数中调用递归函数,将生成的所有单词存储在一个ArrayList中。对于每个可能的单词,我们可以将其输出到控制台。
public static void main(String[] args) {
String digits = "234";
ArrayList<String> letterCombinations = new ArrayList<>();
letterCombinations.add("0");
letterCombinations.add("1");
letterCombinations.add("abc");
letterCombinations.add("def");
letterCombinations.add("ghi");
letterCombinations.add("jkl");
letterCombinations.add("mno");
letterCombinations.add("pqrs");
letterCombinations.add("tuv");
letterCombinations.add("wxyz");
ArrayList<String> words = new ArrayList<>();
StringBuilder sb = new StringBuilder();
generateWords(digits, sb, words, letterCombinations, 0);
for (String word : words) {
System.out.println(word);
}
}
adg
adh
adi
aeg
aeh
aei
afg
afh
afi
bdg
bdh
bdi
beg
beh
bei
bfg
bfh
bfi
cdg
cdh
cdi
ceg
ceh
cei
cfg
cfh
cfi
通过使用Java ArrayList和递归函数,我们可以快速高效地构建出电话号码中的所有可能单词。这个方法对于构建任何基于电话键盘的应用都是非常有用的。