I think this is the method that people are commonly taught to do in university so just wanted to post this. No map or anything :)
class Solution(object): def toHex(self, num): """ :type num: int :rtype: str 1111...1111 """ if num == 0: return "0" if num < 0: num = -num num ^= 0xffffffff num += 1 hex_str = '' while num > 0: digit = num % 16 if digit < 10: hex_str += str(digit) else: hex_letter = chr(digit - 10 + ord('a')) hex_str += hex_letter num /= 16 return hex_str[::-1]
if num < 0, i am essentially taking the twos compliment of 0, that means I have to invert all the bits and add 1. Unfortunately in python, teh ~ operator does not flip the bits, so i XOR it with a 32 bit integer that is all 1's, which is 0xffffffff, then add 1
Wouldn't that still be the same negative number?
For example, if num = -2, which is 0xFFFFFFFD
after taking -num, it becomes +2, which is 0x00000002
you xor it with 0xFFFFFFFF, which makes num = 0xFFFFFFFC
and then you increment it by 1, which makes num 0xFFFFFFFD now. This is exactly the same number as it is before and it is still negative.
I have to convert it to a positive equivalent since the 2nd loop is while the number is > 0
I just tried what you said in the python shell like so: http://imgur.com/a/A5SEl
seems like python does not make it a negative number
Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.