用 Python 编写程序来查找与 n 具有相同数量设置位数的较大数字?\

pythonserver side programmingprogramming更新于 2026/2/16 2:52:17

假设我们有一个数字 n;我们必须找到最小的下一个更高数字,其 1 的数量与二进制形式的 n 相同。

因此,如果输入为 n = 7,则输出将为 11,因为二进制中的 7 是 0111,而比 7 更高且有三个 1 的数字将是 11,即二进制中的 1011。

为了解决这个问题,我们将遵循以下步骤:

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

  • 当 copy 不为 0 且 copy 为偶数时,执行

    • zeros := zeros + 1

    • copy = copy / 2

  • 当 copy 为奇数时,执行

    • ones := those + 1

    • copy = copy / 2

  • right := those + zeros

  • n := n OR (2^right)

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

相关文章


有用资源