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