S obzirom na brojni ispis sve moguće kombinacije žica koje se mogu koristiti za biranje određenog broja u telefonu sa sljedećim specifikacijama. U danom telefonu možemo birati 2 pomoću A ili B ili C 3 pomoću d ili e ili f ................... 8 Korištenje t ili u ili u ili v 9 koristeći w ili x ili y ili z 1 koristeći samo 1 0 Korištenje 0. Na primjer, ako je 23 dani telefonski broj, program bi trebao ispisati ad bd BF CD CE CF CF
Ideja je pohranjivanje znamenke na znakove mapiranja na hash mapi. Karta pohranjuje sve znakove koji se mogu koristiti Diale A CIIG. Postavljamo svaki mogući lik za trenutnu znamenku i ponavljanje za preostale znamenke.
applet applet
Algoritam:
- Stvorite hash kartu s tipkama kao znamenke od 0 do 9 i vrijednosti kao skup znakova povezanih sa svakom znamenkom.
- Definirajte rekurzivnu funkciju ispis koji uzima četiri argumenta:
a. PHNO - telefonski broj ulaza
b. i - indeks trenutne znamenke koja se obrađuje
c. HM - hash karta znamenke do skupova znakova
d. str - niz do sada generiranih znakova - Unutar funkcije PrintStrings:
a. Provjerite jesam li stigao do kraja telefonskog broja. Ako je odgovor da, ispišite generirani niz i vratite se.
b. Nabavite skup znakova povezanih s trenutnom znamenkom s karte hash -a.
c. Iterate nad svakim znakom u setu i:
i. Dodajte znak String Str.
ii. Rekurzivno nazovite funkciju ispisa za sljedeću znamenku.
iii. Uklonite posljednji znak iz String Str. - Definirajte funkciju PrintStringForNumber koja uzima jedan argument:
a. PHNO - telefonski broj ulaza - Unutar funkcije PrintStringForNumber nazovite funkciju ispisa s argumentima phno 0 hm i praznim nizom.
Ispod je Java implementacija ove ideje.
Provedba:
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');
Izlaz
AD AE AF BD BE BF CD CE CF
Vremenska složenost: O (2^n) ovdje je n duljina niza
preuzmite youtube s vlc
Pomoćni prostor: O (n)