用Python编写程序查找具有与n相同的置位位数的更高数字?
假设我们有一个数字n;我们必须找到与n的二进制形式中相同数量的1的最小下一个更高数字。
因此,如果输入是n = 7,则输出将是11,因为7在二进制中为0111,具有三个1的7的下一个更高数字将是11,它在二进制中为1011。
为了解决这个问题,我们将遵循以下步骤:
- copy:= n,zeros:= 0,ones:= 0
-
当复制不为0且为偶数时,执行以下操作
- zeros:= zeros + 1
-
复制=复制/2
-
当复制为奇数时,执行以下操作
- ones:=ones+ 1
-
复制=复制/2
- ones:=ones+ 1
-
右:= 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