Problem Statement
(Source) 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 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.
- 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"
Solution
题目已经限定输入的num
是32位有符号整型数字。因为每四位二进制位可以组成一位十六进制位,所以用移位操作从输入数字的二进制形式尾端开始处理,处理八次。注意处理特殊情况(num = 0
)。算法的时间复杂度与空间复杂度均为
O(1)
.
class Solution(object):
def toHex(self, num):
"""
:type num: int
:rtype: str
"""
if num == 0:
return '0'
res = []
for i in xrange(8):
tmp = []
for j in xrange(4):
tmp.append(num & 1)
num >>= 1
x = tmp[0] + (tmp[1] << 1) + (tmp[2] << 2) + (tmp[3] << 3)
res.append(str(x) if x < 10 else chr(ord('a') + x - 10))
res.reverse()
return ''.join(res).lstrip('0')