##### Welcome to Subscribe On Youtube

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

# 405. Convert a Number to Hexadecimal

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 = ""
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()
}