2429. Minimize XOR LeetCode Solution
In this guide, you will get 2429. Minimize XOR LeetCode Solution with the best time and space complexity. The solution to Minimize XOR problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Minimize XOR solution in C++
- Minimize XOR solution in Java
- Minimize XOR solution in Python
- Additional Resources
Problem Statement of Minimize XOR
Given two positive integers num1 and num2, find the positive integer x such that:
x has the same number of set bits as num2, and
The value x XOR num1 is minimal.
Note that XOR is the bitwise XOR operation.
Return the integer x. The test cases are generated such that x is uniquely determined.
The number of set bits of an integer is the number of 1’s in its binary representation.
Example 1:
Input: num1 = 3, num2 = 5
Output: 3
Explanation:
The binary representations of num1 and num2 are 0011 and 0101, respectively.
The integer 3 has the same number of set bits as num2, and the value 3 XOR 3 = 0 is minimal.
Example 2:
Input: num1 = 1, num2 = 12
Output: 3
Explanation:
The binary representations of num1 and num2 are 0001 and 1100, respectively.
The integer 3 has the same number of set bits as num2, and the value 3 XOR 1 = 2 is minimal.
Constraints:
1 <= num1, num2 <= 109
Complexity Analysis
- Time Complexity: O(\log\texttt{num1} + \log\texttt{num2})
- Space Complexity: O(1)
2429. Minimize XOR LeetCode Solution in C++
class Solution {
public:
int minimizeXor(unsigned num1, unsigned num2) {
constexpr int kMaxBit = 30;
int bits = popcount(num2);
// Can turn off all the bits in `num1`.
if (popcount(num1) == bits)
return num1;
int ans = 0;
// Turn off the MSB if we have `bits` quota.
for (int i = kMaxBit; i >= 0; --i)
if (num1 >> i & 1) {
ans |= 1 << i;
if (--bits == 0)
return ans;
}
// Turn on the LSB if we still have `bits`.
for (int i = 0; i < kMaxBit; ++i)
if ((num1 >> i & 1) == 0) {
ans |= 1 << i;
if (--bits == 0)
return ans;
}
return ans;
}
};
/* code provided by PROGIEZ */
2429. Minimize XOR LeetCode Solution in Java
class Solution {
public int minimizeXor(int num1, int num2) {
final int kMaxBit = 30;
int bits = Integer.bitCount(num2);
// Can turn off all the bits in `num1`.
if (Integer.bitCount(num1) == bits)
return num1;
int ans = 0;
// Turn off the MSB if we have `bits` quota.
for (int i = kMaxBit - 1; i >= 0; --i)
if ((num1 >> i & 1) == 1) {
ans |= 1 << i;
if (--bits == 0)
return ans;
}
// Turn on the LSB if we still have `bits`.
for (int i = 0; i < kMaxBit; ++i)
if ((num1 >> i & 1) == 0) {
ans |= 1 << i;
if (--bits == 0)
return ans;
}
return ans;
}
}
// code provided by PROGIEZ
2429. Minimize XOR LeetCode Solution in Python
class Solution:
def minimizeXor(self, num1: int, num2: int) -> int:
kMaxBit = 30
bits = num2.bit_count()
# Can turn off all the bits in `num1`.
if num1.bit_count() == bits:
return num1
ans = 0
# Turn off the MSB if we have `bits` quota.
for i in reversed(range(kMaxBit)):
if num1 >> i & 1:
ans |= 1 << i
bits -= 1
if bits == 0:
return ans
# Turn on the LSB if we still have `bits`.
for i in range(kMaxBit):
if (num1 >> i & 1) == 0:
ans |= 1 << i
bits -= 1
if bits == 0:
return ans
return ans
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.