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
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP