在 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,则:
- s := table[digit - 1, i]
- 如果 char_map[digit] 不等于 index,则:
- 中断
- 对于 out 中的每个字符串,执行以下操作:
- 如果 index > 0,则:
- out := temp 的副本
- index := index + 1
- 如果 index 等于 0,则:
- 返回 out
- 如果数字不在 char_map 中,则:
示例
让我们看看以下实现以更好地理解:
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
广告