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

โปรแกรมค้นหาจำนวนที่สูงกว่าด้วยจำนวนบิตชุดเดียวกันกับ n ใน Python หรือไม่?


สมมติว่าเรามีตัวเลข n; เราต้องหาจำนวนที่สูงกว่าถัดไปที่เล็กที่สุดด้วยจำนวนเดียวกันของ 1s เป็น n ในรูปแบบไบนารี

ดังนั้น หากอินพุตเท่ากับ n =7 เอาต์พุตจะเป็น 11 เนื่องจาก 7 ในไบนารีคือ 0111 และสูงกว่าถัดไปจาก 7 โดยมีสามตัวคือ 11 ซึ่งเท่ากับ 1011 ในไบนารี

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • สำเนา :=n, ศูนย์ :=0, ตัว :=0

  • ในขณะที่การคัดลอกไม่ใช่ 0 และการคัดลอกจะเท่ากัน ทำ

    • ศูนย์ :=ศูนย์ + 1

    • สำเนา =สำเนา / 2

  • ในขณะที่การคัดลอกเป็นเลขคี่ให้ทำ

    • อัน :=อัน + 1

    • สำเนา =สำเนา / 2

  • ขวา :=หนึ่ง + ศูนย์

  • n :=n OR (2^ขวา)

  • n :=n AND invert of ((2^right) - 1)

  • n :=n OR((2 ^ (ones - 1)) - 1

  • กลับ n

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

ตัวอย่าง

class Solution:
   def solve(self, n):
      copy = n
      zeros = 0
      ones = 0
      while copy and not copy & 1:
         zeros += 1
         copy >>= 1
      while copy & 1:
         ones += 1
         copy >>= 1
      right = ones + zeros
      n |= 1 << right
      n &= ~((1 << right) - 1)
      n |= (1 << ones - 1) - 1
      return n

ob = Solution()
n = 7
print(ob.solve(n))

อินพุต

7

ผลลัพธ์

11