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]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP