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

輸出

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 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告