用Python编写程序查找具有与n相同的置位位数的更高数字?

用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 + 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程