在 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]
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
广告