logo

Alle kombinasjoner av strenger som kan brukes til å ringe et tall

Gitt et tallutskrift alt mulig Kombinasjoner av strenger som kan brukes til å ringe det gitte nummeret i en telefon med følgende spesifikasjoner. I den gitte telefonen kan vi ringe 2 ved hjelp av A eller B eller C 3 ved å bruke D eller E eller F ................... 8 ved å bruke T eller U eller V 9 ved å bruke W eller X eller Y eller Z 1 ved å bruke bare 1 0 ved å bruke 0. For eksempel hvis 23 er det gitte telefonnummeret, skal programmet skrive ut ad AE AF BD BE BF CD CE CF

Tanken er å lagre siffer til tegn som kartlegger hasjkartet. Kartet lagrer alle tegn som kan brukes, ring et siffer. Vi plasserer alle mulige karakterer for gjeldende siffer og gjentar seg for gjenværende sifre. 

oppføring java

Algoritme:

  • Lag et hasjkart med nøkler som sifre fra 0 til 9 og verdier som settet med tegn tilknyttet hvert siffer.
  • Definer en rekursiv funksjon PrintStrings som tar fire argumenter:
    en. Phno - Inngangstelefonnummeret
    b. I - Indeksen for det nåværende sifferet som behandles
    c. HM - Hash -kartet over siffer til karaktersett
    d. STR - Strengen med tegn som genereres så langt
  • Inne i PrintStrings -funksjonen:
    en. Sjekk om jeg har nådd slutten av telefonnummeret. Hvis ja, skriv ut den genererte strengen og returnerer.
    b. Få settet med tegn tilknyttet det nåværende sifferet fra hasjkartet.
    c. Iterere over hvert tegn i settet og:
           jeg. Legg karakteren til strengen Str.
           ii. Kall rekursivt PrintStrings -funksjonen for neste siffer.
          iii. Fjern det siste tegnet fra strengen Str.
  • Definer en funksjon PrintStringFornumber som tar ett argument:
    en. Phno - Inngangstelefonnummeret
  • Inne i PrintStringFornumber -funksjonen, ring PrintStrings -funksjonen med argumentene Phno 0 HM og en tom streng.

Nedenfor er Java -implementering av denne ideen. 

Implementering:

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

Produksjon
AD AE AF BD BE BF CD CE CF 

Tidskompleksitet: O (2^n)  Her n er lengden på strengen 

Hjelpeplass: O (n)

imessage-spill på Android