Дано число друкувати все можливе комбінації рядків, які можна використовувати для набору заданого номера в телефоні з наступними специфікаціями. У даному телефоні ми можемо набрати 2 за допомогою A або B або C 3 за допомогою D або E або F ................... 8 за допомогою T або U або V 9 за допомогою W або X або Y або Z 1, використовуючи лише 1 0, використовуючи 0.
Ідея полягає в тому, щоб зберігати цифру для персонажів, що відображають на хеш -карті. Карта зберігає всі символи, які можна використовувати набору цифри. Ми розміщуємо всіх можливих персонажів для поточної цифри та рецидиву для решти цифр.
java рядок масиву
Алгоритм:
- Створіть хеш -карту з клавішами як цифри від 0 до 9 та значення як набір символів, пов'язаних з кожною цифрою.
- Визначте рекурсивну функцію друку, яка займає чотири аргументи:
а. PHNO - номер телефону введення
б. i - індекс поточної цифри, що обробляється
c. HM - хеш -карта цифри до символів
д. str - рядок символів, що генеруються досі - Всередині функції PrintStrings:
а. Перевірте, чи я дійшов до кінця номера телефону. Якщо так, друкуйте створений рядок і повернути.
б. Отримайте набір символів, пов’язаних із поточною цифрою з хеш -карти.
c. Повторюйте кожного символу в наборі та:
я. Додавайте символ до рядка Str.
ii. Рекурсивно зателефонуйте функції PrintStrings для наступної цифри.
iii. Видаліть останній символ із рядка 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)
черга та пріоритетна черга в java