Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.
Note:
a-f) must be in lowercase.0s. 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.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:]
注:Main ideal is to flip the negative number to positive by using following code: # num = num + 2**32
负数的binary 表示就是num + 2**32的正数表示。因为python里hex和bin都是针对正数有效。
>>> bin(-1)
‘-0b1‘
>>> bin(-12)
‘-0b1100‘
>>> hex(-12)
‘-0xc‘
>>> hex(-123)
‘-0x7b‘
因此,自己写的话,可以:
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
其他解法:
def toHex(self, num):
if num==0: return ‘0‘
mp = ‘0123456789abcdef‘ # like a map
ans = ‘‘
for i in range(8):
n = num & 15 # this means num & 1111b
c = mp[n] # get the hex char
ans = c + ans
num = num >> 4
return ans.lstrip(‘0‘) #strip leading zeroes
leetcode 405. Convert a Number to Hexadecimal
原文:https://www.cnblogs.com/bonelee/p/8836737.html