程序查找与Python中的n相同的置位位数的更高数字?
假设我们有一个数字n;我们必须找到二进制数形式的最小的下一个较高的数字,该数字与n相同,为1。
因此,如果输入像n=7,则输出将为11,因为二进制中的7为0111,接下来从7高到3的结果为11,二进制中为1011。
为了解决这个问题,我们将按照以下步骤操作:
复制:=n,零:=0,一个:=0
当复制不为0且复制为偶数时,执行
零:=零+1
复制=复制/2
虽然复制是奇怪的,但是
一个:=一个+1
复制=复制/2
右:=一+零
n:=nOR(2^对)
n:=nAND取反(((2^right)-1)
n:=nOR((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