使用 Java ArrayList 打印电话数字的所有可能单词


在这篇文章中,我们将学习如何使用Java从电话数字字符串生成所有可能的单词。手机键盘上的每个数字都对应一组字母,我们的任务是找到按下这些数字可以形成的每个可能的字母组合。例如,如果输入是“23”,则输出将包括“ad”、“ae”、“af”等组合。我们将使用递归方法来实现这一点,使我们能够系统地生成并打印与给定数字对应的所有可能的单词。

问题陈述

编写一个 Java 程序,用于从电话数字字符串生成所有可能的单词。以下是相同内容的演示 -

输入

str = "32" 

输出

[gd, hd, id, ge, je, ie, gf, hf, if]

按下 3 可以形成的字符是 g、h、i,按下 2 可以形成的字符是 d、e、f。因此,所有单词都将是第一个字符属于 g、h、i,第二个字符属于 d、e、f 的组合。

要打印电话数字的所有可能单词,您可以使用递归方法,该方法生成与电话数字对应的所有可能的字母组合。

打印电话数字的所有可能单词的步骤

以下是打印电话数字的所有可能单词的步骤 -

  • 我们将从java.util 包导入ArrayListArraysHashMapListMap
  • 定义一个phoneDigitMap,将每个数字 (2-9) 映射到相应的字母列表。
  • 函数getWordsFromPhoneDigits接受三个参数:当前数字字符串、正在构建的单词以及一个用于存储所有可能单词的列表。
  • 该函数检查是否没有更多数字剩余:如果为真,则将构建的单词添加到单词列表中并返回;如果为假,则检索第一个数字的字母,然后对每个字母递归调用自身,更新构建的单词并传入剩余的数字。
  • 主函数初始化电话数字的输入字符串和一个用于存储单词的空列表,它使用这些参数调用getWordsFromPhoneDigits 函数
  • 最后,它循环遍历生成的单词列表并打印每个单词。

打印电话数字所有可能单词的 Java 程序

以下是打印电话数字所有可能单词的代码 -

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class PhoneDigitsConvertToWords {   
   //hashmap to store phone digits and character
    private static Map<Character, List<Character>> phoneDigitMap = new HashMap<>();
   
    static {
        phoneDigitMap.put('2', Arrays.asList('a', 'b', 'c'));
        phoneDigitMap.put('3', Arrays.asList('d', 'e', 'f'));
        phoneDigitMap.put('4', Arrays.asList('g', 'h', 'i'));
        phoneDigitMap.put('5', Arrays.asList('j', 'k', 'l'));
        phoneDigitMap.put('6', Arrays.asList('m', 'n', 'o'));
        phoneDigitMap.put('7', Arrays.asList('p', 'q', 'r', 's'));
        phoneDigitMap.put('8', Arrays.asList('t', 'u', 'v'));
        phoneDigitMap.put('9', Arrays.asList('w', 'x', 'y', 'z'));
    }
   
   //Driver method
    public static void main(String[] args) {
        String digitsStr = "23";
        List<String> words = new ArrayList<>();
        getWordsFromPhoneDigits(digitsStr, "", words);
        for (String word : words) {
            System.out.println(word);
        }
    }
   
   //method to get words from the input phone digit string
    private static void getWordsFromPhoneDigits(String digitsStr, String currentWord, List<String> words) {
        if (digitsStr.length() == 0) {
            words.add(currentWord);
            return;
        }
        char digit = digitsStr.charAt(0);
        List<Character> letters = phoneDigitMap.get(digit);
        for (Character letter : letters) {
            getWordsFromPhoneDigits(digitsStr.substring(1), currentWord + letter, words);
        }
    }
}

输出

ad
ae
af
bd
be
bf
cd
ce
cf

时间复杂度O(3^N * 4^M)

空间复杂度O(3^N * 4^M)

代码解释

在上面的程序中,PhoneDigitsConvertToWords 类根据电话键盘映射将电话数字字符串转换为所有可能的字母组合。它使用HashMap将每个数字 (2-9) 与其对应的字母相关联。在main() 方法中,它使用数字“23”初始化一个字符串,并初始化一个空列表来存储结果。递归方法getWordsFromPhoneDigits 通过检查是否有任何数字需要处理来构建组合。如果没有数字剩余,它会将当前单词添加到列表中;否则,它会检索第一个数字的字母,并递归生成剩余数字的组合。最后,它打印所有可能的组合。

更新于: 2024-10-24

291 次查看

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.