使用 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 包导入ArrayList、Arrays、HashMap、List 和Map。
- 定义一个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 通过检查是否有任何数字需要处理来构建组合。如果没有数字剩余,它会将当前单词添加到列表中;否则,它会检索第一个数字的字母,并递归生成剩余数字的组合。最后,它打印所有可能的组合。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP