好久沒發每日文了
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