Dato un numero di stampa tutto possibile combinazioni di stringhe che possono essere utilizzate per comporre il numero dato in un telefono con le seguenti specifiche. Nel telefono dato possiamo comporre 2 utilizzando A o B o C 3 usando D o E o F ................... 8 usando T o U o V 9 usando W o X o Y o Z 1 usando solo 1 0 usando 0. Ad esempio se 23 è il numero di telefono dato che il programma deve stampare AE af bd essere bf cd ce cf cf cf
L'idea è di archiviare la cifra ai personaggi mappati nella mappa hash. La mappa memorizza tutti i caratteri che possono essere usati comporre una cifra. Posizioniamo ogni possibile carattere per le cifre attuali e si ripresentano per le cifre rimanenti.
stringa formattata c
Algoritmo:
- Crea una mappa hash con tasti come cifre da 0 a 9 e valori come set di caratteri associati a ciascuna cifra.
- Definire una stampa di funzioni ricorsive che richiede quattro argomenti:
UN. PHNO - Il numero di telefono di input
B. I - L'indice della cifra corrente in fase di elaborazione
C. HM - La mappa hash da cifre a set di caratteri
D. str - la stringa di caratteri generati finora - All'interno della funzione di stampa:
UN. Controlla se ho raggiunto la fine del numero di telefono. Se sì, stampare la stringa e restituire.
B. Ottieni l'insieme di caratteri associati alla cifra corrente dalla mappa hash.
C. Iterare su ogni personaggio nel set e:
io. Aggiungi il carattere alla stringa str.
ii. Chiama ricorsivamente la funzione di stampa per la cifra successiva.
iii. Rimuovere l'ultimo carattere dalla stringa str. - Definire una funzione di stampa stampaggio che prende uno argomento:
UN. PHNO - Il numero di telefono di input - All'interno della funzione PrintStringFornumber Chiama la funzione di stampa con gli argomenti PHNO 0 HM e una stringa vuota.
Di seguito è riportata l'implementazione di Java di questa idea.
Implementazione:
C++// C++ program for the above approach #include #include using namespace std; void printStrings(string phNo int i unordered_map<char string> hm string str) { if (i == phNo.length()) { cout << str << ' '; return; } string s = hm[phNo[i]]; for (int j = 0; j < s.length(); j++) { str.push_back(s[j]); printStrings(phNo i+1 hm str); str.pop_back(); } } void printStringForNumber(string phNo) { unordered_map<char string> hm = { {'2' 'ABC'} {'3' 'DEF'} {'4' 'GHI'} {'5' 'JKL'} {'6' 'MNO'} {'7' 'PQRS'} {'8' 'TUV'} {'9' 'WXYZ'} {'1' '1'} {'0' '0'} }; string str; printStrings(phNo 0 hm str); } int main() { printStringForNumber('23'); return 0; } // This code is contributed by codebraxnzt
Java // Java program to print all possible key strings // that can be used to dial a phone number. import java.util.HashMap; class ConvertToString { // A Recursive function to print all combinations // that can be used to dial a given number. // phNo ==> Given Phone Number // i ==> Current digit of phNo to be processed // hm ==> Stores characters that can be used to // to dial a digit. // str ==> Current output string static void printStrings(String phNo int i HashMap<Character String> hm StringBuilder str) { // If all digits are processed print output // string if (i == phNo.length()) { System.out.print(str + ' '); return; } // Get current digit of phNo and recur for all // characters that can be used to dial it. String s = hm.get(phNo.charAt(i)); for (int j = 0; j < s.length(); j++) { str.append(s.charAt(j)); printStrings(phNo i+1 hm str); str.deleteCharAt(str.length()-1); } } // Prints all possible combinations of strings that // can be used to dial c[]. static void printStringForNumber(String phNo) { // Create a HashMap HashMap<Character String> hm = new HashMap<Character String>(); // For every digit store characters that can // be used to dial it. hm.put('2' 'ABC'); hm.put('3' 'DEF'); hm.put('4' 'GHI'); hm.put('5' 'JKL'); hm.put('6' 'MNO'); hm.put('7' 'PQRS'); hm.put('8' 'TUV'); hm.put('9' 'WXYZ'); hm.put('1' '1'); hm.put('0' '0'); // Create a string to store a particular output // string StringBuilder str = new StringBuilder(); // Call recursive function printStrings(phNo 0 hm str); } // Driver code to test above methods public static void main(String args[]) { // Prints printStringForNumber('23'); } }
Python def print_strings(ph_no i hm s): if i == len(ph_no): print(s end=' ') return for c in hm[ph_no[i]]: print_strings(ph_no i+1 hm s+c) def print_string_for_number(ph_no): hm = { '2': 'ABC' '3': 'DEF' '4': 'GHI' '5': 'JKL' '6': 'MNO' '7': 'PQRS' '8': 'TUV' '9': 'WXYZ' '1': '1' '0': '0' } s = '' print_strings(ph_no 0 hm s) print_string_for_number('23')
C# using System; using System.Collections.Generic; class Program { static void printStrings(string phNo int i Dictionary<char string> hm string str) { if (i == phNo.Length) { Console.Write(str + ' '); return; } string s = hm[phNo[i]]; for (int j = 0; j < s.Length; j++) { str += s[j]; printStrings(phNo i+1 hm str); str = str.Remove(str.Length-1); } } static void printStringForNumber(string phNo) { Dictionary<char string> hm = new Dictionary<char string> { {'2' 'ABC'} {'3' 'DEF'} {'4' 'GHI'} {'5' 'JKL'} {'6' 'MNO'} {'7' 'PQRS'} {'8' 'TUV'} {'9' 'WXYZ'} {'1' '1'} {'0' '0'} }; string str = ''; printStrings(phNo 0 hm str); } static void Main(string[] args) { printStringForNumber('23'); } }
JavaScript function printStrings(phNo i hm s) { if (i === phNo.length) { console.log(s + ' '); return; } for (let j = 0; j < hm[phNo[i]].length; j++) { s += hm[phNo[i]][j]; printStrings(phNo i+1 hm s); s = s.slice(0 -1); } } function printStringForNumber(phNo) { let hm = { '2': 'ABC' '3': 'DEF' '4': 'GHI' '5': 'JKL' '6': 'MNO' '7': 'PQRS' '8': 'TUV' '9': 'WXYZ' '1': '1' '0': '0' }; let s = ''; printStrings(phNo 0 hm s); } printStringForNumber('23');
Produzione
AD AE AF BD BE BF CD CE CF
Complessità temporale: O (2^n) Qui n è la lunghezza della stringa
Spazio ausiliario: O (N)
java if else istruzione