Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
- All letters in hexadecimal (
a-f
) must be in lowercase. - The hexadecimal string must not contain extra leading
0
s. If the number is zero, it is represented by a single zero character'0'
; otherwise, the first character in the hexadecimal string will not be the zero character. - The given number is guaranteed to fit within the range of a 32-bit signed integer.
- You must not use any method provided by the library which converts/formats the number to hex directly.
Example 1:
Input: 26 Output: "1a"
Example 2:
Input: -1 Output: "ffffffff"
>>> hex(123)
'0x7b'
>>> hex(123)[2:]
'7b'
>>> hex(1)
'0x1'
>>> hex(0)
'0x0'
>>> bin(0)
'0b0'
>>> bin(1)
'0b1'
class Solution(object): def toHex(self, num): """ :type num: int :rtype: str """ # use recurively if num < 0: return hex(num+(1<<32))[2:] else: return hex(num)[2:]
Note:Main ideal is to flip the negative number to positive by using following code: # num = num + 2**32
The binary representation of a negative number is the representation of a positive number. Because hex and bin in python are valid for positive numbers.num + 2**32
>>> bin(-1)
'-0b1'
>>> bin(-12)
'-0b1100'
>>> hex(-12)
'-0xc'
>>> hex(-123)
'-0x7b'
Therefore, if you write it yourself, you can:
class Solution(object): def toHex(self, num): """ :type num: int :rtype: str """ # use recurively if num == 0: return "0" if num < 0: num += (1<<32) ans = "" hex_s = "0123456789abcdef" while num != 0: ans = hex_s[num & 0xf] + ans num = num >> 4 return ans
Other solutions:
def toHex(self, num): if num==0: return '0' mp = '0123456789abcdef' # like a map years = '' for i in range(8): n = num & 15 # this means num & 1111b c = mp[n] # get the hex char years = c + years num = num >> 4 return ans.lstrip('0') #strip leading zeroes