Visi stygų deriniai, kurie gali būti naudojami surinkti skaičių

Suteikė skaičių spausdinimą visus įmanomus deriniai stygų, kurias galima naudoti nurodytam numeriui surinkti telefone su šiomis specifikacijomis. Duota telefone mes galime surinkti 2 naudodami A arba B arba C 3, naudodami D arba E arba F ................... 8 Naudodami T arba U arba V 9, naudojant w arba x arba y arba z 1

Idėja yra saugoti skaitmenų simbolių žemėlapį maišos žemėlapyje. Žemėlapyje kaupiami visi simboliai, kuriuos galima naudoti „Dial“ skaitmens. Mes pateikiame visus įmanomus dabartinio skaitmens simbolius ir pasikartojame likusiems skaitmenims. 

Algoritmas:

  • Sukurkite maišos žemėlapį su klavišais kaip skaitmenis nuo 0 iki 9 ir reikšmes kaip simbolių rinkinį, susietą su kiekvienu skaitmeniu.
  • Apibrėžkite rekursinių funkcijų spausdintuvus, kuriuose yra keturi argumentai:
    a. PHNO - įvesties telefono numeris
    b. i - apdoroto dabartinio skaitmens rodyklė
    c. HM - maišos skaitmenų žemėlapis į simbolių rinkinius
    d. str. - iki šiol sugeneruota simbolių eilutė
  • Funkcijos „PrintStrings“ viduje:
    a. Patikrinkite, ar aš pasiekiau telefono numerio pabaigą. Jei taip, atsispausdinkite sugeneruotą eilutę ir grąžinimą.
    b. Gaukite simbolių rinkinį, susietą su dabartiniu skaitmeniu iš maišos žemėlapio.
    c. Pakartokite kiekvieną rinkinio simbolią ir:
           i. Pridėkite simbolią prie eilutės str.
           ii. Rekursyviai paskambinkite kitam skaitmeniui atspausdinimo funkcijai.
          iii. Pašalinkite paskutinį simbolią iš stygos str.
  • Apibrėžkite funkcijos spausdinimo stringFornumber, kuris paima vieną argumentą:
    a. PHNO - įvesties telefono numeris
  • Funkcijos „PrintStringFornumber“ viduje skambinkite spausdinimo funkcijai, naudodamiesi argumentais, PHNO 0 HM ir tuščia eilute.

Žemiau yra „Java“ šios idėjos įgyvendinimas. 

Įgyvendinimas:

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'  );   

Išvestis
AD AE AF BD BE BF CD CE CF  

Laiko sudėtingumas: o (2^n)  Čia n yra stygos ilgis 

Pagalbinė erdvė: o (n)