用 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

