使用 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 次檢視

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告