查找由映射到数字的数字的字符组成的所有字符串
考虑下面的列表,其中从 1 到 9 的每个数字映射到几个字符。
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']
给定一个数字,用给定列表中的相应字符替换其数字并打印所有可能的字符串。数字中每次出现的数字都应考虑相同的字符。输入数字为正数且不包含 0。
例子 :
Input : 121
Output : ADA BDB CDC AEA BEB CEC AFA BFB CFC
Input : 22
Output : DD EE FF
这个想法是对于输入数字中的每个数字,我们考虑由前一个数字形成的字符串,并将映射到当前数字的字符附加到它们。如果这不是数字的第一次出现,我们会附加与第一次出现相同的字符。
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 input,
vector table[])
{
// vector of strings to store output
vector out, temp;
// stores index of first occurrence
// of the digits in input
unordered_map 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 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 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
输出 :
ADA BDB CDC AEA BEB CEC AFA BFB CFC