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

ตรวจสอบว่าการแทนค่าบิตเตอรี่มีบล็อก 0 และ 1 ติดกันเท่ากันหรือไม่ ใน Python


ปัญหา

ให้ตัวเลข num ตรวจสอบว่าในรูปแบบไบนารี จำนวนบล็อกติดต่อกันของ 0 และ 1 เท่ากันหรือไม่ (ไม่นับ 0 และตัวเลขที่เป็น 1 ทั้งหมด)

ตัวอย่าง

num = 455 → binary = 111000111 → บล็อก: 111, 000, 111 → ความยาว 3,3,3 → True

แนวคิดการแก้ปัญหา

  1. แปลงเป็นสตริงไบนารี (ตัด '0b')
  2. นับความยาวบล็อกติดต่อกันของ 0 และ 1
  3. เก็บความยาวในเซต → ถ้าขนาดเซต = 1 → ทุกบล็อกยาวเท่ากัน

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

def solve(num):
    bin_str = bin(num)[2:]
    blocks = set()
    count = 1
    for i in range(len(bin_str)-1):
        if bin_str[i] == bin_str[i+1]:
            count += 1
        else:
            blocks.add(count)
            count = 1
    blocks.add(count)  # บล็อกสุดท้าย
    return len(blocks) == 1

print(solve(455))  # True

อินพุต / เอาต์พุต

Input:  455
Output: True