Donat un número imprimiu tot possible combinacions de cadenes que es poden utilitzar per marcar el número donat en un telèfon amb especificacions següents. Al telèfon donat podem marcar 2 mitjançant A o B o C 3 amb D o E o F ................... 8 Utilitzant T o U o V 9 amb w o x o y o z 1 amb només 1 0 amb 0. Per exemple, si 23 és el número de telèfon indicat que el programa ha d’imprimir AD AF BD BF CD CE CE CF CF
La idea és emmagatzemar el mapeig de caràcters al mapa de caràcters al mapa de hash. El mapa emmagatzema tots els caràcters que es poden utilitzar marquen un dígit. Col·loquem tots els personatges possibles per a dígits actuals i es repeteixin per als dígits restants.
tutorial del llenguatge de programació java
Algoritme:
- Creeu un mapa hash amb tecles com a dígits de 0 a 9 i valors com a conjunt de caràcters associats a cada dígit.
- Definiu una funció recursiva que printen els quatre arguments:
a. PHNO: el número de telèfon d'entrada
b. i - L'índex del dígit actual es processa
c. HM: el mapa de hash de conjunts de caràcters
d. Str: la cadena de caràcters generats fins ara - Dins de la funció PrintStrings:
a. Comproveu si he arribat al final del número de telèfon. En cas afirmatiu, imprimiu la cadena generada i el retorn.
b. Obteniu el conjunt de caràcters associats al dígit actual del mapa de hash.
c. Itereu sobre cada personatge del conjunt i:
i. Afegiu el personatge a la cadena str.
II. Truqueu recursivament a la funció PrintStrings per al següent dígit.
iii. Traieu l'últim personatge de la cadena Str. - Definiu una funció printStringFornumber que pren un argument:
a. PHNO: el número de telèfon d'entrada - Dins de la funció printStringFornumber truqueu a la funció PrintStrings amb els arguments pHno 0 hm i una cadena buida.
A continuació, es mostra la implementació de Java d'aquesta idea.
Implementació:
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');
Producció
AD AE AF BD BE BF CD CE CF
Complexitat del temps: o (2^n) Aquí n és la longitud de la cadena
Espai auxiliar: O (N)
commutador java int