Alle Kombinationen von Zeichenfolgen, mit denen eine Zahl wählt werden kann

Bei einer Nummer alle möglich drucken Kombinationen von Zeichenfolgen, mit denen die angegebene Nummer in einem Telefon mit den folgenden Spezifikationen wählt werden kann. In dem angegebenen Telefon können wir 2 mit A oder B oder C 3 verwenden, indem wir D oder E oder F ................... 8 verwenden, wobei T oder U oder V 9 verwendet wird, wobei W oder X oder Y oder Z 1 nur 1 0 verwendet wird, um 0 zu verwenden. Wenn 23 die angegebene Telefonnummer ist, sollte das Programm ad ae af bd bf cd ce cf drucken

Die Idee ist, die Ziffern auf Zeichenzuordnungen in Hash -Karte zu speichern. Die Karte speichert alle Zeichen, die verwendet werden können, wobei eine Ziffer verwendet werden kann. Wir platzieren jeden möglichen Charakter für die aktuelle Ziffer und Wiederholung der verbleibenden Ziffern. 

Algorithmus:

  • Erstellen Sie eine Hash -Karte mit Schlüsseln als Ziffern von 0 bis 9 und Werten als Zeichen der Zeichen, die jeder Ziffer zugeordnet sind.
  • Definieren Sie eine rekursive Funktion Printstrings, die vier Argumente einnimmt:
    A. Phno - die Eingabe -Telefonnummer
    B. I - Der Index der aktuellen Ziffer wird verarbeitet
    C. HM - Die Hash -Karte der Ziffern zu Zeichensätzen
    D. STR - Die bisher generierte Zeichenfolge
  • In der Funktion der Printstrings:
    A. Überprüfen Sie, ob ich das Ende der Telefonnummer erreicht habe. Wenn ja, drucken Sie die generierte Zeichenfolge und kehren Sie zurück.
    B. Holen Sie sich den Satz von Zeichen, die der aktuellen Ziffer aus der Hash -Karte zugeordnet sind.
    C. Iterieren Sie über jeden Charakter im Set und:
           ich. Fügen Sie das Zeichen an die String str.
           ii. Rufen Sie rekursiv die PrintStrings -Funktion für die nächste Ziffer auf.
          III. Entfernen Sie das letzte Zeichen aus der String str.
  • Definieren Sie eine Funktion printstringFornumber, die ein Argument einnimmt:
    A. Phno - die Eingabe -Telefonnummer
  • In der Function Function PrintStringFornumber Rufen Sie die PrintStrings -Funktion mit den Argumenten Phno 0 hm und einer leeren Zeichenfolge auf.

Unten finden Sie die Java -Implementierung dieser Idee. 

Durchführung:

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

Ausgabe
AD AE AF BD BE BF CD CE CF  

Zeitkomplexität: o (2^n)  Hier ist n Länge der Zeichenfolge 

Hilfsraum: o (n)