logo

Totes les combinacions de cadenes que es poden utilitzar per marcar un número

Donat un número imprimiu tot possible combinacions de cadenes que es poden utilitzar per marcar el número donat en un telèfon amb especificacions següents. Al telèfon donat podem marcar 2 mitjançant A o B o C 3 amb D o E o F ................... 8 Utilitzant T o U o V 9 amb w o x o y o z 1 amb només 1 0 amb 0. Per exemple, si 23 és el número de telèfon indicat que el programa ha d’imprimir AD AF BD BF CD CE CE CF CF

La idea és emmagatzemar el mapeig de caràcters al mapa de caràcters al mapa de hash. El mapa emmagatzema tots els caràcters que es poden utilitzar marquen un dígit. Col·loquem tots els personatges possibles per a dígits actuals i es repeteixin per als dígits restants. 

tutorial del llenguatge de programació java

Algoritme:

  • Creeu un mapa hash amb tecles com a dígits de 0 a 9 i valors com a conjunt de caràcters associats a cada dígit.
  • Definiu una funció recursiva que printen els quatre arguments:
    a. PHNO: el número de telèfon d'entrada
    b. i - L'índex del dígit actual es processa
    c. HM: el mapa de hash de conjunts de caràcters
    d. Str: la cadena de caràcters generats fins ara
  • Dins de la funció PrintStrings:
    a. Comproveu si he arribat al final del número de telèfon. En cas afirmatiu, imprimiu la cadena generada i el retorn.
    b. Obteniu el conjunt de caràcters associats al dígit actual del mapa de hash.
    c. Itereu sobre cada personatge del conjunt i:
           i. Afegiu el personatge a la cadena str.
           II. Truqueu recursivament a la funció PrintStrings per al següent dígit.
          iii. Traieu l'últim personatge de la cadena Str.
  • Definiu una funció printStringFornumber que pren un argument:
    a. PHNO: el número de telèfon d'entrada
  • Dins de la funció printStringFornumber truqueu a la funció PrintStrings amb els arguments pHno 0 hm i una cadena buida.

A continuació, es mostra la implementació de Java d'aquesta idea. 

Implementació:

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

Producció
AD AE AF BD BE BF CD CE CF 

Complexitat del temps: o (2^n)  Aquí n és la longitud de la cadena 

Espai auxiliar: O (N)

commutador java int