Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาตัวเลขที่มีความแตกต่างติดต่อกันใน Python


สมมติว่าเราต้องหาอาร์เรย์ของขนาด 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]