<p>Given a 32-bit integer <code>num</code>, return <em>a string representing its hexadecimal representation</em>. For negative integers, <a href="https://en.wikipedia.org/wiki/Two%27s_complement" target="_blank">two&rsquo;s complement</a> method is used.</p>

<p>All the letters in the answer string should be lowercase characters, and there should not be any leading zeros in the answer except for the zero itself.</p>

<p><strong>Note:&nbsp;</strong>You are not allowed to use any built-in library method to directly solve this problem.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> num = 26
<strong>Output:</strong> "1a"
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> num = -1
<strong>Output:</strong> "ffffffff"
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>-2<sup>31</sup> &lt;= num &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

class Solution:
    def toHex(self, num: int) -> str:
        # If num is 0, return '0'
        if num == 0:
            return '0'
        
        # Handle negative numbers by taking the two's complement
        if num < 0:
            num = (1 << 32) + num
        
        # Mapping for hexadecimal digits
        hex_map = "0123456789abcdef"
        result = ""
        
        # Convert number to hexadecimal
        while num > 0:
            # Get the least significant 4 bits
            result = hex_map[num & 15] + result
            # Right shift by 4 bits
            num = num >> 4
        
        return result

# Test the solution
solution = Solution()
print(solution.toHex(26))  # Should print "1a"
print(solution.toHex(-1))  # Should print "ffffffff"
16400