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

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

สมมติว่าต้องหาอาร์เรย์ขนาด N ที่ความต่างสัมบูรณ์ระหว่างหลักติดกันทุกคู่เท่ากับ K ตัวเลขทุกตัวต้องไม่มีศูนย์นำหน้า (ยกเว้น 0 เอง)

ตัวอย่าง: N = 4, K = 7 ผลลัพธ์ [1818, 2929, 7070, 8181, 9292] (ไม่รวม 0707 เพราะมีศูนย์นำหน้า)

วิธีแก้ปัญหา (BFS)

  1. ถ้า N == 1 คืน 0..9
  2. queue := deque(1..9)
  3. วน N-1 รอบ:
    • ดึงตัวเลขจากคิว คำนวณหลักสุดท้าย lsd
    • ถ้า lsd - K >= 0 เพิ่ม num*10 + lsd - K
    • ถ้า K != 0 และ lsd + K <= 9 เพิ่ม num*10 + lsd + K
  4. คืนค่าทั้งหมดในคิว

ตัวอย่างโค้ด

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]