Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2025-01-15 21:32:12
好久没发每日文了
2429. Minimize XOR
思路:
先数num1、num2化成二进制后分别有几个1
假设num1、num2画成二进制后1的个数为cnt1、cnt2
分成3个情况
1. cnt1 = cnt2 :
直接回传num1
2. cnt1 > cnt2 :
假设diff = cnt1 - cnt2
从低位开始把num1是1的位数变为0
重复上述动作 diff 次
最后回传num1
3. cnt1 < cnt2 :
假设diff = cnt2 - cnt1
从低位开始把num1是0的位数变成1
重复上述动作diff次
最后回传num1
golang code :
func minimizeXor(num1 int, num2 int) int {
cnt1, cnt2, tmp := 0, 0, num1
for num2 > 0 {
cnt2 += num2 & 1
num2 >>= 1
}
for num1 > 0 {
cnt1 += num1 & 1
num1 >>= 1
}
ans, idx := tmp, 0
if cnt1 == cnt2 {
return tmp
} else if cnt1 < cnt2 {
cnt2 -= cnt1
for cnt2 > 0 {
if tmp&1 == 0 {
ans |= (1 << idx)
cnt2

Links booklink

Contact Us: admin [ a t ] ucptt.com