查找在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

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

  • :=一个新列表

  • temp:=一个新列表

  • char_map:=一个新映射

  • 索引:= 0

  • 对于inp中的每个数字,执行

    • 如果索引等于0,则

    • 如果索引> 0是,则

    • 如果index> 0,则

    • 索引:=索引+ 1

    • s:= table [digit-1,i]

    • 在out的末尾插入s

    • 打破

    • s:= table [digit-1,i]

    • s:=字符串[char_map [digit]]

    • 如果char_map [digit]与索引不同,则

    • 字符串:=字符串连接s

    • 在temp的末尾插入字符串

    • 为每个字符串输入

    • 如果char_map [digit]与索引不同,则

    • out:= temp的副本

    • char_map [digit]:=索引

    • 如果数字不在char_map中,则

    • 清除临时列表

    • 对于范围在0到表格[数字-1]范围内的i,执行

    • 返回

    示例

    让我们看下面的实现以更好地理解-

    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]

    输出结果

    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
    猜你喜欢