Given a keypad of a mobile, and keys that need to be pressed, the task is to print all the words which are possible to generate by pressing these numbers.
Input: str = "12" Output: [ad, bd, cd, ae, be, ce, af, bf, cf] Explanation: The characters that can be formed by pressing 1 is a, b, c and by pressing 2 characters d, e, f can be formed. So all the words will be a combination where first character belongs to a, b, c and 2nd character belongs to d, e, f Input: str = "4" Output: [j, k, l] Explanation: The characters that can be formed by pressing 4 is j, k, l
Method 1: Another approach is discussed here Print all possible words from phone digits
Approach: The approach is slightly different from the approach in the other article. Suppose there are n keys which are pressed (a1 a2 a3 ..an). Find all the words that can be formed using (a2 a3 ..an). Suppose 3 characters can be generated by pressing a1 then for every character concatenate the character before all the words and insert them to the list.
If the keypress is 12
The characters that can be formed by pressing 1 is a, b, c and by pressing 2 characters d, e, f can be formed.
So all the words that can be formed using 2 are [d, e, f]
So now concatenate ‘a’ with all words returned so, the list is [ad, ae, af] similarly concatenate b and c. So the list becomes [ad, ae, af, bd, be, bf, cd, ce, cf].
- Write a recursive function that accepts key press string and returns all the words that can be formed in an Array list.
- If the length of the given string is 0 then return Arraylist containing empty string.
- Else recursively call the function with a string except the first character of original string, i.e string containing all the characters from index 1 to n-1. and store the arraylist returned, list and create a new arraylist ans
- Get the character set of the first character of original string, CSet
- For every word of the list run a loop through the Cset and concatenate the charcter of Cset infront of the word of list and insert them in the ans arraylist.
- Return the arraylist, ans.
[dg, eg, fg, dh, eh, fh, di, ei, fi]
- Time Complexity: O(3n).
Though the recursive function runs n times. But the size of the arraylist grows exponentially. So there will be around 3n elements in the arraylist. Therefore, traversing them will take 3n time.
- Space Complexity:O(3n).
Space required to store all words is O(3n). As there will be around 3n words in the output.
- Print all possible words from phone digits
- ArrayList of ArrayList in Java
- Find the last two missing digits of the given phone number
- Print all valid words that are possible using Characters of Array
- Print all possible combinations of words from Dictionary using Trie
- Minimum digits to be removed to make either all digits or alternating digits same
- Print all permutation of a string using ArrayList
- Print all subsequences of a string using ArrayList
- Check if the given string of words can be formed from words present in the dictionary
- Count words that appear exactly two times in an array of words
- Java Program for Phone Mnemonics
- Numbers of Length N having digits A and B and whose sum of digits contain only digits A and B
- Remove all elements from the ArrayList in Java
- How to add all items from a collection to an ArrayList in Java?
- Java.util.ArrayList.add() Method in Java
- Java.util.ArrayList.addall() method in Java
- Java.util.Arraylist.indexOf() in Java
- Amazon Interview Experience | Set 368 (Phone and Onsite)
- Given a sequence of words, print all anagrams together | Set 2
- Print all words matching a pattern in CamelCase Notation Dictonary
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : andrew1234