Python程式:查詢具有相同連續差的數字


假設我們需要找到一個大小為 N 的陣列,使得每兩個連續數字之間的絕對差為 K。答案中的每個數字都不能有前導零,除非數字本身為 0。

因此,如果輸入為 N = 4 K = 7,則輸出將為 [1818, 2929, 7070, 8181, 9292],這裡 0707 無效,因為它有前導 0。

為了解決這個問題,我們將遵循以下步驟:

  • 如果 N 等於 1,則

    • 返回一個從 0 到 9 的新列表

  • 佇列 := 建立一個包含 1 到 9 所有元素的佇列

  • 對於範圍 0 到 N - 2 中的 n,執行以下操作:

    • 佇列長度 := 佇列的大小

    • 對於範圍 0 到佇列長度 - 1 中的 j,執行以下操作:

      • 數字 := 佇列的左側專案,並將其從佇列中刪除

      • 最低有效位 := 數字模 10

      • 如果最低有效位 - K >= 0,則

        • 將數字 * 10 + 最低有效位 - K 插入佇列的末尾

      • 如果 K 和最低有效位 + K <= 9,則

        • 將數字 * 10 + 最低有效位 + K 插入佇列的末尾

  • 返回佇列的元素

示例

讓我們看看下面的實現以更好地理解:

from collections import deque
def solve(N, K):
   if N == 1:
      return list(range(10))
   queue = deque(list(range(1, 10)))
   for n in range(N - 1):
      len_queue = len(queue)
      for j in range(len_queue):
         num = queue.popleft()
         lsd = num % 10
         if lsd - K >= 0:
            queue.append( num * 10 + lsd - K )
         if K and lsd + K <= 9:
            queue.append( num * 10 + lsd + K )
   return list(queue)

N = 4
K = 7
print(solve(N, K))

輸入

4, 7

輸出

[1818, 2929, 7070, 8181, 9292]

更新於:2021年10月7日

296 次檢視

啟動您的職業生涯

完成課程後獲得認證

開始
廣告