Givet et nummer Udskriv alt muligt kombinationer af strenge, der kan bruges til at ringe til det givne nummer i en telefon med følgende specifikationer. I den givne telefon kan vi ringe 2 ved hjælp af A eller B eller C3 ved hjælp af D eller E eller F ................... 8 ved hjælp af T eller U eller V 9 ved hjælp af W eller X eller Y eller Z 1 ved hjælp af kun 1 0 ved hjælp af 0. For eksempel hvis 23 er det givne telefonnummer, skal programmet udskrive AD AE AF BD være BF CD CD CF
Ideen er at gemme ciffer til tegn kortlægning på hashkort. Kortet gemmer alle tegn, der kan bruges, skal du ringe til et ciffer. Vi placerer enhver mulig karakter for det nuværende ciffer og gentager sig for resterende cifre.
lister java
Algoritme:
- Opret et hash -kort med nøgler som cifre fra 0 til 9 og værdier som det sæt tegn, der er knyttet til hvert ciffer.
- Definer en rekursive funktionsprintstrings, der tager fire argumenter:
en. PHNO - Indgangstelefonnummeret
b. I - Indekset for det aktuelle ciffer, der behandles
c. HM - Hash -kortet over ciffer til karaktersæt
d. Str - den hidtil genererede karakterer, der er genereret - Inde i printstrings -funktionen:
en. Kontroller, om jeg har nået slutningen af telefonnummeret. Hvis ja udskriv den genererede streng og retur.
b. Få sættet af tegn, der er knyttet til det aktuelle ciffer fra hashkortet.
c. Iterere over hver karakter i sættet og:
jeg. Tilføj karakteren til strengen str.
ii. Kald rekursivt printstrings -funktionen for det næste ciffer.
III. Fjern den sidste karakter fra strengen str. - Definer en funktion PrintStringFornumb, der tager et argument:
en. PHNO - Indgangstelefonnummeret - Inde i PrintStringFornumb -funktionen skal du ringe til PrintStrings -funktionen med argumenterne phno 0 Hm og en tom streng.
Nedenfor er Java -implementering af denne idé.
Implementering:
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');
Produktion
AD AE AF BD BE BF CD CE CF
Tidskompleksitet: O (2^n) Her er n længden af streng
Hjælpeplads: O (n)
imessage spil på Android