สมมติว่าเราต้องหาอาร์เรย์ของขนาด N โดยที่ผลต่างที่แน่นอนระหว่างทุก ๆ สองหลักที่ต่อเนื่องกันคือ K ทุกตัวเลขในคำตอบจะต้องไม่มีศูนย์นำหน้ายกเว้นตัวเลข 0 เอง
ดังนั้น หากอินพุตเป็นเหมือน N =4 K =7 เอาต์พุตจะเป็น [1818, 2929, 7070, 8181, 9292] ที่นี่ 0707 ไม่ถูกต้องเนื่องจากมี 0 นำหน้า
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้า N เท่ากับ 1 แล้ว
-
กลับรายการใหม่จากช่วง 0 ถึง 9
-
-
คิว :=สร้างคิวด้วยองค์ประกอบทั้งหมดตั้งแต่ 1 ถึง 9
-
สำหรับ n ในช่วง 0 ถึง N - 2 ให้ทำ
-
len_queue :=ขนาดของคิว
-
สำหรับ j ในช่วง 0 ถึง len_queue - 1 ทำ
-
num :=ออกจากคิวแล้วลบออกจากคิว
-
lsd :=num mod 10
-
ถ้า lsd - K>=0 แล้ว
-
ใส่ num * 10 + lsd - K ต่อท้ายคิว
-
-
ถ้า K และ lsd + K <=9 แล้ว
-
ใส่ num * 10 + lsd + 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]