logo

Visas virkņu kombinācijas, kuras var izmantot, lai sastādītu numuru

Ņemot vērā skaitli izdrukāt visu iespējamo kombinācijas stīgas, kuras var izmantot, lai izsauktu norādīto numuru tālrunī ar šādām specifikācijām. Dotajā tālrunī mēs varam piezvanīt 2, izmantojot A vai B vai C 3, izmantojot D vai E vai F ................... 8, izmantojot t vai u vai v 9, izmantojot w vai x vai y vai z 1, izmantojot tikai 1 0, izmantojot 0. Piemēram, ja 23 ir dotais tālruņa numurs

Ideja ir saglabāt ciparu rakstzīmju kartēšanu hash kartē. Kartē tiek glabātas visas rakstzīmes, kuras var izmantot, sastādiet ciparu. Mēs ievietojam visu iespējamo rakstzīmi pašreizējam ciparam un atkārtotiem atlikušajiem cipariem. 

1 no 1000.00

Algoritms:

  • Izveidojiet hash karti ar taustiņiem kā cipari no 0 līdz 9 un vērtības kā rakstzīmju kopu, kas saistīta ar katru ciparu.
  • Definējiet rekursīvo funkciju printstrings, kas prasa četrus argumentus:
    a. PNNO - ievades tālruņa numurs
    b. i - apstrādātā cipara indekss
    c. HM - hash ciparu karte rakstzīmju komplektiem
    D. STR - līdz šim ģenerētā rakstzīmju virkne
  • Funkcijas printstrings iekšpusē:
    a. Pārbaudiet, vai esmu sasniedzis tālruņa numura beigas. Ja jā, izdrukājiet ģenerēto virkni un atgriezieties.
    b. Saņemiet rakstzīmju komplektu, kas saistīts ar pašreizējo ciparu no hash kartes.
    c. Atkārtot katru rakstzīmi komplektā un:
           i. Pievienojiet rakstzīmi virknei str.
           II. Nākamajam ciparam atkārtoti izsauciet printstrings funkciju.
          III. Noņemiet pēdējo rakstzīmi no virknes str.
  • Definējiet funkciju PrintStringFornumber, kas ņem vienu argumentu:
    a. PNNO - ievades tālruņa numurs
  • Funkcijas printStringFornumber iekšpusē. Zvaniet Funkcija PrintStrings ar argumentiem Phno 0 Hm un tukšu virkni.

Zemāk ir Java šīs idejas ieviešana. 

Ieviešana:

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

Izvade
AD AE AF BD BE BF CD CE CF 

Laika sarežģītība: O (2^n)  šeit n ir virknes garums 

ups jēdzieni

Palīgtelpa: O (n)