<p>Given two positive integers <code>num1</code> and <code>num2</code>, find the positive integer <code>x</code> such that:</p>

<ul>
	<li><code>x</code> has the same number of set bits as <code>num2</code>, and</li>
	<li>The value <code>x XOR num1</code> is <strong>minimal</strong>.</li>
</ul>

<p>Note that <code>XOR</code> is the bitwise XOR operation.</p>

<p>Return <em>the integer </em><code>x</code>. The test cases are generated such that <code>x</code> is <strong>uniquely determined</strong>.</p>

<p>The number of <strong>set bits</strong> of an integer is the number of <code>1</code>&#39;s in its binary representation.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> num1 = 3, num2 = 5
<strong>Output:</strong> 3
<strong>Explanation:</strong>
The binary representations of num1 and num2 are 0011 and 0101, respectively.
The integer <strong>3</strong> has the same number of set bits as num2, and the value <code>3 XOR 3 = 0</code> is minimal.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> num1 = 1, num2 = 12
<strong>Output:</strong> 3
<strong>Explanation:</strong>
The binary representations of num1 and num2 are 0001 and 1100, respectively.
The integer <strong>3</strong> has the same number of set bits as num2, and the value <code>3 XOR 1 = 2</code> is minimal.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= num1, num2 &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution:
    def minimizeXor(self, num1: int, num2: int) -> int:
        '''
        If we want XOR to be minimised, we want bits to cancel.

        We count the set bits in num2.
        Then, we want to occupy the set bits in num1.
        If we still have left over spaces, occupy from first.
        '''

        bit_count = 0
        x = 0

        for i in range(31, -1, -1):
            bit = (num2 >> i) & 1
            bit_count += bit
        
        for i in range(31, -1, -1):
            bit = (num1 >> i) & 1
            if bit == 1:
                x += 2 ** i
                bit_count -= 1
            
            if bit_count == 0:
                break
        
        if bit_count != 0:
            for i in range(32):
                bit = (num1 >> i) & 1
                if bit != 1:
                    x += 2 ** i
                    bit_count -= 1
                
                if bit_count == 0:
                    break
        
        return x
41