题
下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。
示例1:
输入:num = 2(或者0b10)
输出:[4, 1] 或者([0b100, 0b1])
示例2:
输入:num = 1
输出:[2, -1]
提示:
num的范围在[1, 2147483647]之间;
如果找不到前一个或者后一个满足条件的正数,那么输出 -1。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/closed-number-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
不能超过31位
class Solution:
def findClosedNumbers(self, num: int) -> List[int]:
num_2 = bin(num)[2:]
# 初始化加0
if len(num_2) < 31:
num_2 = "0" + num_2
ans = [None, None]
for i in range(len(num_2), -1, -1):
if ans[0] is None and num_2[i - 1:i + 1] == "01":
ans[0] = num_2[:i - 1] + "10" + "0" * num_2[i + 1:].count("0") + "1" * num_2[i + 1:].count("1")
if ans[1] is None and num_2[i - 1:i + 1] == "10":
# 先补充1 后补0 因为变小了 后面尽量大
ans[1] = num_2[:i - 1] + "01" + "1" * num_2[i + 1:].count("1") + "0" * num_2[i + 1:].count("0")
ans[0] = -1 if ans[0] is None else int(ans[0], 2)
ans[1] = -1 if ans[1] is None else int(ans[1], 2)
return ans
该问题涉及计算机科学中的二进制表示。给定一个正整数,目标是找到两个整数,它们的二进制表示中1的个数与输入数字相同,一个比输入数略大,另一个略小。提供的代码实现通过遍历二进制字符串来寻找这两个数。
754

被折叠的 条评论
为什么被折叠?



