📜  Java ArrayList打印电话号码中所有可能的单词(1)

📅  最后修改于: 2023-12-03 15:15:55.318000             🧑  作者: Mango

Java ArrayList打印电话号码中所有可能的单词

在电话键盘上,每个数字对应着不同的字母,这就是为什么我们可以使用电话号码打出单词。在这个项目中,我们将使用Java ArrayList来打印电话号码中所有可能的单词。

运行环境
  • Java 8及以上版本
实现步骤
  1. 创建一个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");
    
  2. 定义一个递归函数来处理电话号码中的每个数字,并构建出所有可能的单词。我们可以用一个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);
         }
     }
    
  3. 在主函数中调用递归函数,将生成的所有单词存储在一个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和递归函数,我们可以快速高效地构建出电话号码中的所有可能单词。这个方法对于构建任何基于电话键盘的应用都是非常有用的。