logo

Alla kombinationer av strängar som kan användas för att ringa ett nummer

Med tanke på ett nummertryck allt möjligt kombinationer av strängar som kan användas för att ringa det givna numret i en telefon med följande specifikationer. I den givna telefonen kan vi ringa 2 med A eller B eller C 3 med D eller E eller F ................... 8 med T eller U eller V 9 med W eller X eller Y eller Z 1 med endast 1 0 med 0. Till exempel om 23 är det givna telefonnumret Programmet ska skriva ut ad ae af bd vara bf cd cef cf cf

Tanken är att lagra siffra till tecken som kartlägger på hashkarta. Kartan lagrar alla tecken som kan användas Dial A -siffra. Vi placerar alla möjliga tecken för nuvarande siffra och återkommer för återstående siffror. 

java jämförbart gränssnitt

Algoritm:

  • Skapa en hashkarta med nycklar som siffror från 0 till 9 och värden som uppsättningen tecken som är associerade med varje siffra.
  • Definiera en rekursiv funktion PrintStrings som tar fyra argument:
    a. phno - ingångstelefonnumret
    b. I - Indexet för den aktuella siffran som behandlas
    c. HM - Hash Map of Digit to Character Sets
    d. STR - Strängen av karaktärer som hittills genererats
  • Inuti PrintStrings -funktionen:
    a. Kontrollera om jag har nått slutet av telefonnumret. Om ja skriver ut den genererade strängen och return.
    b. Få uppsättningen tecken som är associerade med den aktuella siffran från hash -kartan.
    c. Iterera över varje tecken i uppsättningen och:
           i. Lägg till karaktären till strängen str.
           ii. Rekursivt ring PrintStrings -funktionen för nästa siffra.
          iii. Ta bort det sista tecknet från String Str.
  • Definiera en funktion PrintStringFornumber som tar ett argument:
    a. phno - ingångstelefonnumret
  • Inuti PrintStringFornumber -funktionen ring PrintStrings -funktionen med argumenten PhnO 0 HM och en tom sträng.

Nedan följer Java -implementeringen av denna idé. 

Genomförande:

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 

Tidskomplexitet: o (2^n)  Här är n längden på strängen 

Hjälputrymme: o (n)

java uttalande