使用 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 透過檢查是否有任何數字需要處理來構建組合。如果沒有數字剩餘,它會將當前單詞新增到列表中;否則,它會檢索第一個數字的字母,並遞迴生成剩餘數字的組合。最後,它列印所有可能的組合。
廣告