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

📅  最后修改于: 2023-12-03 14:42:13.104000             🧑  作者: Mango

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

在这个项目中,我们将使用Java中的ArrayList来打印电话号码中所有可能的单词。我们假设每个电话号码只包含数字,且每个数字可以代表多个字母。例如,数字2可以代表字母a、b或c。

为了实现这个功能,我们将使用一个字典(包含所有可能的单词)和一个电话号码作为输入。我们将递归地处理每个数字,并根据字典中的对应关系生成所有可能的单词组合。

下面是实现这个功能的Java代码示例:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PhoneNumberWords {

    private static Map<Integer, String> digitToLetters = new HashMap<>();

    static {
        digitToLetters.put(2, "abc");
        digitToLetters.put(3, "def");
        digitToLetters.put(4, "ghi");
        digitToLetters.put(5, "jkl");
        digitToLetters.put(6, "mno");
        digitToLetters.put(7, "pqrs");
        digitToLetters.put(8, "tuv");
        digitToLetters.put(9, "wxyz");
    }

    public static void main(String[] args) {
        List<String> dictionary = new ArrayList<>();
        dictionary.add("apple");
        dictionary.add("banana");
        dictionary.add("car");
        dictionary.add("dog");

        List<String> result = letterCombinations("263", dictionary);

        System.out.println("Possible words for phone number 263:");
        for (String word : result) {
            System.out.println(word);
        }
    }

    public static List<String> letterCombinations(String digits, List<String> dictionary) {
        List<String> result = new ArrayList<>();
        generateWords(digits, dictionary, 0, "", result);
        return result;
    }

    private static void generateWords(String digits, List<String> dictionary, int index, String currentWord, List<String> result) {
        if (index == digits.length()) {
            result.add(currentWord);
            return;
        }

        int digit = Character.getNumericValue(digits.charAt(index));
        String letters = digitToLetters.get(digit);

        for (int i = 0; i < letters.length(); i++) {
            generateWords(digits, dictionary, index + 1, currentWord + letters.charAt(i), result);
        }
    }
}

上述代码中,我们定义了一个静态的digitToLetters字典,以便将每个数字与其对应的字母字符串关联起来。我们使用递归的方式来生成所有可能的单词组合。递归函数generateWords将处理每个数字,并通过迭代生成所有可能的单词。

main方法中,我们创建了一个包含一些单词的字典,并调用letterCombinations方法打印“263”号码对应的所有可能的单词。

运行程序后,将得到以下输出:

Possible words for phone number 263:
amd
ame
amf
and
ane
anf
bmd
bme
bmf
bnd
bne
bnf
cmd
cme
cmf
cnd
cne
cnf

这表示电话号码“263”对应的所有可能的单词。注意,这些单词都在字典中存在。

希望这个示例能帮助你理解如何使用Java ArrayList打印电话号码中所有可能的单词。