在 Python 中查找由数字的字符映射形成的所有字符串


假设我们有一个字符映射如下,这里每个数字,从 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。

因此,如果输入类似于 [4,3,5],则输出将为

JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO

为了解决这个问题,我们将遵循以下步骤:

  • out := 一个新的列表
  • temp := 一个新的列表
  • char_map := 一个新的映射
  • index := 0
  • 对于 inp 中的每个数字,执行以下操作:
    • 如果数字不在 char_map 中,则:
      • char_map[digit] := index
    • 清空 temp 列表
    • 对于 i 从 0 到 table[digit - 1] 的大小,执行以下操作:
      • 如果 index 等于 0,则:
        • s := table[digit - 1, i]
        • 将 s 插入到 out 的末尾
      • 如果 index > 0,则:
        • 对于 out 中的每个字符串,执行以下操作:
          • s := table[digit - 1, i]
            • 如果 char_map[digit] 不等于 index,则:
              • s := string[char_map[digit]]
            • string := string 连接 s
            • 将 string 插入到 temp 的末尾
        • 如果 char_map[digit] 不等于 index,则:
          • 中断
      • 如果 index > 0,则:
        • out := temp 的副本
      • index := index + 1
    • 返回 out

示例

让我们看看以下实现以更好地理解:

def findCombinations(inp, table):
   out = list()
   temp = list()
   char_map = dict()
   index = 0
   for digit in inp:
      if digit not in char_map:
         char_map[digit] = index
      temp.clear()
      for i in range(len(table[digit - 1])):
         if index == 0:
            s = table[digit - 1][i]
            out.append(s)
         if index > 0:
            for string in out:
               s = table[digit - 1][i]
               if char_map[digit] != index:
                  s = string[char_map[digit]]
               string = string + s
               temp.append(string)
            if char_map[digit] != index:
               break
      if index > 0:
         out = temp.copy()
      index += 1
   return out
mapping = [['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']]
inp = [4,3,5]
res = findCombinations(inp, mapping)
for it in res:
   print(it, end=" ")

输入

[4,3,5]

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO

更新于: 2020-08-28

199 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告