Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/405.html

405. Convert a Number to Hexadecimal

Level

Easy

Description

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"

Solution

First convert num into 8 parts, each of which can be represented by a hexadecimal number with length 1. Convert each part to hexadecimal and concatenate the parts. Avoid leading zeroes.

  • class Solution {
        public String toHex(int num) {
            if (num == 0)
                return "0";
            int[] bytes = new int[8];
            for (int i = 0; i < 8; i++) {
                int temp = (num >> 4 * i) & 0xf;
                bytes[7 - i] = temp;
            }
            String hex = "";
            boolean flag = false;
            for (int i = 0; i < 8; i++) {
                int curByte = bytes[i];
                if (!flag && curByte == 0)
                    continue;
                hex += hexChar(curByte);
                flag = true;
            }
            return hex;
        }
    
        public char hexChar(int num) {
            if (num < 10)
                return (char) (num + '0');
            else
                return (char) (num - 10 + 'a');
        }
    }
    
  • class Solution:
        def toHex(self, num: int) -> str:
            if num == 0:
                return '0'
            chars = '0123456789abcdef'
            s = []
            for i in range(7, -1, -1):
                x = (num >> (4 * i)) & 0xF
                if s or x != 0:
                    s.append(chars[x])
            return ''.join(s)
    
    ############
    
    class Solution(object):
      def toHex(self, num):
        """
        :type num: int
        :rtype: str
        """
        d = {0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", 8: "8", 9: "9", 10: "a", 11: "b", 12: "c",
             13: "d", 14: "e", 15: "f"}
        ans = ""
        mask = 0xf0000000
        flag = False
        for i in range(0, 8):
          halfb = (num & mask) >> 28
          if halfb != 0:
            flag = True
          if flag:
            ans = ans + d[(num & mask) >> 28]
          num = num << 4
        if ans == "":
          return "0"
        return ans
    
    
  • class Solution {
    public:
        string toHex(int num) {
            if (num == 0) return "0";
            string s = "";
            for (int i = 7; i >= 0; --i) {
                int x = (num >> (4 * i)) & 0xf;
                if (s.size() > 0 || x != 0) {
                    char c = x < 10 ? (char) (x + '0') : (char) (x - 10 + 'a');
                    s += c;
                }
            }
            return s;
        }
    };
    
  • func toHex(num int) string {
    	if num == 0 {
    		return "0"
    	}
    	sb := &strings.Builder{}
    	for i := 7; i >= 0; i-- {
    		x := num >> (4 * i) & 0xf
    		if x > 0 || sb.Len() > 0 {
    			var c byte
    			if x < 10 {
    				c = '0' + byte(x)
    			} else {
    				c = 'a' + byte(x-10)
    			}
    			sb.WriteByte(c)
    		}
    	}
    	return sb.String()
    }
    

All Problems

All Solutions