Étant donné un nombre imprimé tout possible combinaisons des chaînes qui peuvent être utilisées pour composer le numéro donné dans un téléphone avec des spécifications suivantes. Dans le téléphone donné, nous pouvons composer 2 en utilisant A ou B ou C 3 en utilisant D ou E ou F ................... 8 en utilisant T ou U ou V 9 en utilisant w ou x ou y ou z 1 en utilisant seulement 1 0 en utilisant 0. Par exemple, si 23 est le numéro de téléphone donné, le programme doit imprimer AD AE af bd be bf cd ce cf
L'idée est de stocker un chiffre à la cartographie des caractères dans la carte de hachage. La carte stocke tous les caractères qui peuvent être utilisés composent un chiffre. Nous plaçons tous les personnages possibles pour le chiffre actuel et nous recourt pour les chiffres restants.
formes normales
Algorithme:
- Créez une carte de hachage avec des touches comme chiffres de 0 à 9 et valeurs comme l'ensemble des caractères associés à chaque chiffre.
- Définissez une fonction récursive PrintStrings qui prend quatre arguments:
un. PhNO - le numéro de téléphone d'entrée
né I - L'indice du chiffre actuel en cours de traitement
c. HM - La carte de hachage du chiffre aux jeux de caractères
d. Str - La chaîne de caractères générée jusqu'à présent - À l'intérieur de la fonction PrintStrings:
un. Vérifiez si j'ai atteint la fin du numéro de téléphone. Si oui, imprimez la chaîne générée et retournez.
né Obtenez l'ensemble des caractères associés au chiffre actuel de la carte de hachage.
c. Itérer sur chaque caractère de l'ensemble et:
je. Ajoutez le caractère à la chaîne STR.
ii Appelez récursivement la fonction PrintStrings pour le chiffre suivant.
iii. Retirez le dernier caractère de la chaîne STR. - Définissez une fonction PrintStringForNumber qui prend un argument:
un. PhNO - le numéro de téléphone d'entrée - À l'intérieur de la fonction PrintStringForNumber, appelez la fonction PrintStrings avec les arguments PhNO 0 HM et une chaîne vide.
Vous trouverez ci-dessous la mise en œuvre Java de cette idée.
Mise en œuvre:
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');
Sortir
AD AE AF BD BE BF CD CE CF
Complexité du temps: o (2 ^ n) Ici n est la longueur de la chaîne
Espace auxiliaire: o (n)
acteur Zeenat Aman