<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:
        num1_ones_count = 0
        for char in bin(num1)[2:]:
            if char == "1":
                num1_ones_count += 1

        num2_ones_count = 0
        for char in bin(num2)[2:]:
            if char == "1":
                num2_ones_count += 1
        
        if num1_ones_count == num2_ones_count:
            return num1

        num1_bin_chars = bin(num1)[2:]  # Skip substring "0b".
        num1_bin_len = len(num1_bin_chars)

        if num1_ones_count > num2_ones_count:
            x = 0
            for idx, char in enumerate(num1_bin_chars):
                if char == "1":
                    x += 2 ** (num1_bin_len - 1 - idx)
                    num2_ones_count -= 1
                    if num2_ones_count == 0:
                        return x
        
        x = num1
        for idx, char in enumerate(num1_bin_chars[::-1]):
            if char == "0":
                x += 2 ** idx
                num2_ones_count -= 1
                if num2_ones_count == num1_ones_count:
                    return x

        for num in range(num2_ones_count - num1_ones_count):
            x += 2 ** (num1_bin_len + num)
        return x

27