【位运算】先算出num2中1的个数,然后把num1,转化为二进制,从高位开始,如果当前位为1,就在这一位上放1,直到用完num2中1的个数,如果还有剩余,就从地位开始在为0的位置补1。
class Solution {
// 位运算
// 9:04 7
public int minimizeXor(int num1, int num2) {
int n = Integer.bitCount(num2);
int[] num = new int[32];
int[] arr = new int[32];
int i = 0;
while (num1 > 0) {
num[i++] = num1 & 1;
num1 >>= 1;
}
for (i = 31; i >= 0 && n > 0; i--) {
if (num[i] == 1) {
arr[i] = 1;
n--;
}
}
for (i = 0; i < 32 && n > 0; i++) {
if (num[i] == 0) {
arr[i] = 1;
n--;
}
}
int t = 1, ans = 0;
for (i = 0; i < 32; i++) {
ans += arr[i] * t;
t <<= 1;
}
return ans;
}
}