leetcode 405. Convert a Number to Hexadecimal

Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.

Note:

  1. All letters in hexadecimal (a-f) must be in lowercase.
  2. 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.
  3. The given number is guaranteed to fit within the range of a 32-bit signed integer.
  4. 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

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324385766&siteId=291194637