logo

Vse kombinacije nizov, ki jih je mogoče uporabiti za klicanje številke

Glede na številko tiska vse mogoče Kombinacije nizov, ki jih lahko uporabite za klicanje dane številke v telefonu z naslednjimi specifikacijami. V danem telefonu lahko pokličemo 2 s pomočjo A ali B ali C 3 z uporabo D ali E ali F ................... 8 z uporabo t ali u ali v 9 z uporabo W ali X ali Y ali Z 1 z uporabo samo 1 0 z uporabo 0. Na primer, če je 23 dana telefonska številka, ki naj bi program natisnil ad af af bd bf cd ce cf

Ideja je shranjevanje Digit na preslikave znakov na zemljevidu hash. Zemljevid shranjuje vse znake, ki jih lahko uporabite številk. Za preostale številke postavljamo vsak možni znak za trenutno številko in ponovitev. 

java barve

Algoritem:

  • Ustvarite zemljevid hash s tipkami kot števkami od 0 do 9 in vrednosti kot niz znakov, povezanih z vsako številko.
  • Določite rekurzivne funkcijske tiskalne utripe, ki sprejmejo štiri argumente:
    a. Phno - vhodna telefonska številka
    b. I - indeks trenutne številke, ki se obdeluje
    c. HM - Hash Zemljevid digita do naborov znakov
    d. str - niz znakov, ki so bili doslej ustvarjeni
  • Znotraj funkcije printStrings:
    a. Preverite, ali sem dosegel konec telefonske številke. Če je odgovor pritrdilen, natisnite ustvarjeni niz in se vrnite.
    b. Pridobite nabor znakov, povezanih s trenutno številko z zemljevida hash.
    c. Ponovite vsak znak v naboru in:
           i. Dodajte znak k String Str.
           ii. Rekurzivno pokličite funkcijo printStrings za naslednjo številko.
          iii. Odstranite zadnji znak iz String Str.
  • Določite funkcijo printStringForRnumber, ki sprejme en argument:
    a. Phno - vhodna telefonska številka
  • Znotraj funkcije printStringFornMom pokličite funkcijo printStrings z argumenti phno 0 hm in praznim nizom.

Spodaj je Java izvedba te ideje. 

Izvajanje:

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

Izhod
AD AE AF BD BE BF CD CE CF 

Časovna zapletenost: O (2^n)  Tu je n dolžina vrvice 

Pomožni prostor: o (n)

dodajanje v polje java