logo

Всички комбинации от низове, които могат да се използват за набиране на номер

Дадещ номер отпечатайте всички възможни комбинации на струни, които могат да се използват за набиране на дадения номер в телефон със следните спецификации. В дадения телефон можем да набираме 2, използвайки A или B или C 3, използвайки D или E или F ................... 8, използвайки T или U или V 9, използвайки W или X или Y или Z 1, използвайки само 1 0, използвайки 0.

Идеята е да съхранявате цифра до картографиране на символи в хеш карта. Картата съхранява всички символи, които могат да се използват набиране на цифра. Поставяме всеки възможен характер за текущата цифра и се повтаряме за оставащи цифри. 

java свързаност

Алгоритъм:

  • Създайте хеш карта с ключове като цифри от 0 до 9 и стойности като набор от знаци, свързани с всяка цифра.
  • Определете рекурсивна функция PrintStrings, която отнема четири аргумента:
    a. PHNO - Входният телефонен номер
    б. i - индексът на текущата цифра, който се обработва
    c. hm - хеш -картата на цифровите набори от символи
    г. str - низът от генерирани досега знаци
  • Вътре във функцията PrintStrings:
    a. Проверете дали съм достигнал края на телефонния номер. Ако да, отпечатайте генерирания низ и се върнете.
    б. Вземете набора от знаци, свързани с текущата цифра от хеш картата.
    c. Повтаря над всеки герой в снимачната площадка и:
           i. Добавете символа към струната str.
           II. Рекурсивно извиквайте функцията PrintStrings за следващата цифра.
          iii. Премахнете последния символ от низовия str.
  • Определете функция printStringFornumber, която взема един аргумент:
    a. PHNO - Входният телефонен номер
  • Вътре във функцията PrintStringFornumber извикайте функцията PrintStrings с аргументите Phno 0 Hm и празен низ.

По -долу е изпълнението на тази идея на Java. 

Изпълнение:

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

Изход
AD AE AF BD BE BF CD CE CF 

Сложност на времето: O (2^n)  Тук n е дължина на низ 

Спомагателно пространство: o (n)

кат тимпф нетна стойност