Python程式:查詢與n具有相同設定位數的較大數字?


假設我們有一個數字n;我們必須找到具有與n相同的二進位制形式中1的個數的下一個較小的較大數字。

因此,如果輸入類似於n = 7,則輸出將為11,因為7的二進位制形式為0111,而下一個比7大的具有三個1的數字是11,其二進位制形式為1011。

為了解決這個問題,我們將遵循以下步驟

  • copy := n,zeros := 0,ones := 0

  • 當copy不為0且copy為偶數時,執行

    • zeros := zeros + 1

    • copy = copy / 2

  • 當copy為奇數時,執行

    • ones := ones + 1

    • copy = copy / 2

  • right := ones + zeros

  • n := n OR (2^right)

  • n := n AND ( (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

更新於:2020年11月10日

136 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.