logo

כל שילובי המיתרים שניתן להשתמש בהם כדי לחייג מספר

ניתן מספר הדפסת כל אפשרי שילובים של מיתרים שניתן להשתמש בהם כדי לחייג את המספר הנתון בטלפון עם מפרטים הבאים. בטלפון הנתון אנו יכולים לחייג 2 באמצעות A או B או C 3 באמצעות D או E או F ................... 8 באמצעות T או U או V 9 באמצעות W או X או Y או Z 1 באמצעות 1 0 רק באמצעות 0. לדוגמה אם 23 הוא מספר הטלפון הנתון שהתוכנית צריכה להדפיס AE AF AF BD BE BF CD CE CF

הרעיון הוא לאחסן מספרה לדמויות מיפוי במפת חשיש. המפה מאחסנת את כל התווים שניתן להשתמש בהם בחיוג לספרה. אנו מציבים כל תו אפשרי לספרה נוכחית וחוזרים על ידי הספרות שנותרו. 

מיזוג מיון ב-java

אַלגוֹרִיתְם:

  • צור מפת חשיש עם מפתחות כספרות בין 0 ל 9 וערכים כקבוצת התווים המשויכת לכל ספרה.
  • הגדירו פונקציה רקורסיבית הדפסת הדפסה שלוקחת ארבעה טיעונים:
    א. PHNO - מספר הטלפון הקלט
    ב. אני - המדד של הספרה הנוכחית מעובד
    ג. HM - מפת החשיש של ערכות תווים לתווים
    ד. Str - מחרוזת התווים שנוצרו עד כה
  • בתוך פונקציית PrintStrings:
    א. בדוק אם הגעתי לסוף מספר הטלפון. אם כן הדפס את המחרוזת שנוצרה וחזור.
    ב. קבל את מערך התווים המשויך לספרה הנוכחית ממפת ה- hash.
    ג. חזר מעל כל דמות בערכה ו:
           אֲנִי. הוסף את הדמות למחרוזת Str.
           II. קרא רקורסיבית לפונקציית PrintStrings עבור הספרה הבאה.
          III. הסר את התו האחרון מה- String Str.
  • הגדירו פונקציה printStringFornumber שלוקח טיעון אחד:
    א. 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)

אופס מושגים