# Find all strings formed from characters mapped to digits of a number

• Difficulty Level : Hard
• Last Updated : 24 Jan, 2020

Consider below list where each digit from 1 to 9 maps to few characters.

```1 -> ['A', 'B', 'C']
2 -> ['D', 'E', 'F']
3 -> ['G', 'H', 'I']
4 -> ['J', 'K', 'L']
5 -> ['M', 'N', 'O']
6 -> ['P', 'Q', 'R']
7 -> ['S', 'T', 'U']
8 -> ['V', 'W', 'X']
9 -> ['Y', 'Z'] ```

Given a number, replace its digits with corresponding characters in given list and print all strings possible. Same character should be considered for every occurrence of a digit in the number. Input number is positive and doesn’t contain 0.

Examples :

```Input : 121
Output : ADA BDB CDC AEA BEB CEC AFA BFB CFC

Input : 22
Output : DD EE FF
```

The idea is for each digit in the input number, we consider strings formed by previous digit and append characters mapped to current digit to them. If this is not the first occurrence of the digit, we append same character as used in its first occurrence.

## C++

 `// C++ program to find all strings formed from a given``// number where each digit maps to given characters.``#include ``using` `namespace` `std;`` ` `// Function to find all strings formed from a given``// number where each digit maps to given characters.``vector findCombinations(vector<``int``> input,``                                ``vector<``char``> table[])``{``    ``// vector of strings to store output``    ``vector out, temp;`` ` `    ``// stores index of first occurrence``    ``// of the digits in input``    ``unordered_map<``int``, ``int``> mp;`` ` `    ``// maintains index of current digit considered``    ``int` `index = 0;`` ` `    ``// for each digit``    ``for` `(``int` `d: input)``    ``{``        ``// store index of first occurrence``        ``// of the digit in the map``        ``if` `(mp.find(d) == mp.end())``            ``mp[d] = index;`` ` `        ``// clear vector contents for future use``        ``temp.clear();`` ` `        ``// do for each character thats maps to the digit``        ``for` `(``int` `i = 0; i < table[d - 1].size(); i++)``        ``{``            ``// for first digit, simply push all its``            ``// mapped characters in the output list``            ``if` `(index == 0)``            ``{``                ``string s(1, table[d - 1].at(i));``                ``out.push_back(s);``            ``}`` ` `            ``// from second digit onwards``            ``if` `(index > 0)``            ``{``                ``// for each string in output list``                ``// append current character to it.``                ``for``(string str: out)``                ``{``                    ``// convert current character to string``                    ``string s(1, table[d - 1].at(i));`` ` `                    ``// Imp - If this is not the first occurrence``                    ``// of the digit, use same character as used``                    ``// in its first occurrence``                    ``if``(mp[d] != index)``                        ``s = str[mp[d]];`` ` `                    ``str = str + s;`` ` `                    ``// store strings formed by current digit``                    ``temp.push_back(str);``                ``}`` ` `                ``// nothing more needed to be done if this``                ``// is not the first occurrence of the digit``                ``if``(mp[d] != index)``                    ``break``;``            ``}``        ``}`` ` `        ``// replace contents of output list with temp list``        ``if``(index > 0)``            ``out = temp;``        ``index++;``    ``}`` ` `    ``return` `out;``}`` ` `// Driver program``int` `main()``{``    ``// vector to store the mappings``    ``vector<``char``> table[] =``    ``{``        ``{ ``'A'``, ``'B'``, ``'C'` `},``        ``{ ``'D'``, ``'E'``, ``'F'` `},``        ``{ ``'G'``, ``'H'``, ``'I'` `},``        ``{ ``'J'``, ``'K'``, ``'L'` `},``        ``{ ``'M'``, ``'N'``, ``'O'` `},``        ``{ ``'P'``, ``'Q'``, ``'R'` `},``        ``{ ``'S'``, ``'T'``, ``'U'` `},``        ``{ ``'V'``, ``'W'``, ``'X'` `},``        ``{ ``'Y'``, ``'Z'` `}``    ``};`` ` `    ``// vector to store input number``    ``vector<``int``> input = { 1, 2, 1};`` ` `    ``vector out = findCombinations(input, table);`` ` `    ``// print all possible strings``    ``for` `(string it: out)``        ``cout << it << ``" "``;`` ` `    ``return` `0;``}`

## Python3

 `# Python program to find all strings formed from a given``# number where each digit maps to given characters.`` ` `# Function to find all strings formed from a given``# number where each digit maps to given characters.``def` `findCombinations(``input``: ``list``, table: ``list``) ``-``> ``list``:`` ` `    ``# vector of strings to store output``    ``out, temp ``=` `[], []`` ` `    ``# stores index of first occurrence``    ``# of the digits in input``    ``mp ``=` `dict``()`` ` `    ``# maintains index of current digit considered``    ``index ``=` `0`` ` `    ``# for each digit``    ``for` `d ``in` `input``:`` ` `        ``# store index of first occurrence``        ``# of the digit in the map``        ``if` `d ``not` `in` `mp:``            ``mp[d] ``=` `index`` ` `        ``# clear vector contents for future use``        ``temp.clear()`` ` `        ``# do for each character thats maps to the digit``        ``for` `i ``in` `range``(``len``(table[d ``-` `1``])):`` ` `            ``# for first digit, simply push all its``            ``# mapped characters in the output list``            ``if` `index ``=``=` `0``:``                ``s ``=` `table[d ``-` `1``][i]``                ``out.append(s)`` ` `            ``# from second digit onwards``            ``if` `index > ``0``:`` ` `                ``# for each string in output list``                ``# append current character to it.``                ``for` `string ``in` `out:`` ` `                    ``# convert current character to string``                    ``s ``=` `table[d ``-` `1``][i]`` ` `                    ``# Imp - If this is not the first occurrence``                    ``# of the digit, use same character as used``                    ``# in its first occurrence``                    ``if` `mp[d] !``=` `index:``                        ``s ``=` `string[mp[d]]`` ` `                    ``string ``=` `string ``+` `s`` ` `                    ``# store strings formed by current digit``                    ``temp.append(string)`` ` `                ``# nothing more needed to be done if this``                ``# is not the first occurrence of the digit``                ``if` `mp[d] !``=` `index:``                    ``break`` ` `        ``# replace contents of output list with temp list``        ``if` `index > ``0``:``            ``out ``=` `temp.copy()``        ``index ``+``=` `1``    ``return` `out`` ` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``# vector to store the mappings``    ``table ``=` `[[``'A'``, ``'B'``, ``'C'``],``            ``[``'D'``, ``'E'``, ``'F'``],``            ``[``'G'``, ``'H'``, ``'I'``],``            ``[``'J'``, ``'K'``, ``'L'``],``            ``[``'M'``, ``'N'``, ``'O'``],``            ``[``'P'``, ``'Q'``, ``'R'``],``            ``[``'S'``, ``'T'``, ``'U'``],``            ``[``'V'``, ``'W'``, ``'X'``],``            ``[``'Y'``, ``'Z'``]]`` ` `    ``# vector to store input number``    ``input` `=` `[``1``, ``2``, ``1``]``    ``out ``=` `findCombinations(``input``, table)`` ` `    ``# print all possible strings``    ``for` `it ``in` `out:``        ``print``(it, end``=``" "``)`` ` `# This code is contributed by``# sanjeev2552`
Output :
```ADA BDB CDC AEA BEB CEC AFA BFB CFC
```