class Solution {
public:
int minimizeXor(int num1, int num2) {
}
};
2429. 最小 XOR
给你两个正整数 num1
和 num2
,找出满足下述条件的整数 x
:
x
的置位数和 num2
相同,且x XOR num1
的值 最小注意 XOR
是按位异或运算。
返回整数 x
。题目保证,对于生成的测试用例, x
是 唯一确定 的。
整数的 置位数 是其二进制表示中 1
的数目。
示例 1:
输入:num1 = 3, num2 = 5
输出:3
解释:
num1 和 num2 的二进制表示分别是 0011 和 0101 。
整数 3 的置位数与 num2 相同,且 3 XOR 3 = 0
是最小的。
示例 2:
输入:num1 = 1, num2 = 12
输出:3
解释:
num1 和 num2 的二进制表示分别是 0001 和 1100 。
整数 3 的置位数与 num2 相同,且 3 XOR 1 = 2
是最小的。
提示:
1 <= num1, num2 <= 109
原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 1.9 MB, 提交时间: 2022-11-21 14:57:43
func minimizeXor(num1, num2 int) int { c1 := bits.OnesCount(uint(num1)) c2 := bits.OnesCount(uint(num2)) for ; c2 < c1; c2++ { num1 &= num1 - 1 // 最低的 1 变成 0 } for ; c2 > c1; c2-- { num1 |= num1 + 1 // 最低的 0 变成 1 } return num1 }
python3 解法, 执行用时: 44 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-21 14:56:52
''' c2 < c1, 将num1 的最低的 c1 - c2 个1变为0,其结果就是x c2 > c1, 将num1 的最低的 c2 - c1 个0变为1,其结果就是x ''' class Solution: def minimizeXor(self, num1: int, num2: int) -> int: c1 = num1.bit_count() c2 = num2.bit_count() while c2 < c1: num1 &= num1 - 1 # 最低的 1 变成 0 c2 += 1 while c2 > c1: num1 |= num1 + 1 # 最低的 0 变成 1 c2 -= 1 return num1