logo

Bir sayı araştırmak için kullanılabilecek tüm dizeler kombinasyonları

Bir sayı verildiğinde mümkün olan her şeyi yazdırın kombinasyonlar Aşağıdaki özelliklerle verilen numarayı bir telefonda aramak için kullanılabilecek dizelerin. Verilen telefonda, D veya E veya F kullanarak A veya B veya C 3 kullanarak 2'yi arayabiliriz ................... 8 T veya U veya V 9 kullanarak W veya X veya Y veya Z 1 kullanarak 0 kullanılarak 0 kullanarak. Örneğin 23 verilen telefon numarasıysa, program yazdırmalıdır AE af bf bf CD CF

Fikir, hash haritasında eşleştirme karakterlerine rakam depolamaktır. Harita kullanılabilecek tüm karakterleri saklar. Mevcut basamak için olası her karakteri yerleştiririz ve kalan rakamlar için tekrarlarız. 

java yığınları

Algoritma:

  • 0 ila 9 arasında basamak olarak anahtarlarla bir karma haritası ve her bir basamakla ilişkili karakter kümesi olarak değerler oluşturun.
  • Dört argüman alan özyinelemeli bir işlev printstrings tanımlayın:
    A. PHNO - Giriş Telefon Numarası
    B. I - İşlenen mevcut rakamın dizin
    C. HM - Karakter setlerine rakamın karma haritası
    D. STR - Şimdiye kadar üretilen karakter dizisi
  • PrintStrings işlevinin içinde:
    A. Telefon numarasının sonuna ulaşıp ulaşmadığımı kontrol edin. Evet ise, oluşturulan dizeyi yazdırın ve döndürün.
    B. Hash haritasından geçerli basamak ile ilişkili karakter kümesini alın.
    C. Setteki her karakterin üzerinde yineleyin ve:
           Ben. Karakteri Str dizesine ekleyin.
           ii. Bir sonraki basamak için PrintStrings işlevini özyinelemeli olarak çağırın.
          III. Son karakteri Str dizesinden çıkarın.
  • Bir argüman alan printStringFornumber bir işlev tanımlayın:
    A. PHNO - Giriş Telefon Numarası
  • PrintStringFornumber işlevinin içinde, printStrings işlevini phno 0 hm argümanları ve boş bir dize ile çağırın.

Aşağıda bu fikrin Java uygulaması bulunmaktadır. 

Uygulama:

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

Çıktı
AD AE AF BD BE BF CD CE CF 

Zaman karmaşıklığı: o (2^n)  Burada n, ipin uzunluğudur 

içimizde kaç şehir var

Yardımcı Alan: O (N)