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:
- All letters in hexadecimal (
a-f
) must be in lowercase. - The hexadecimal string must not contain extra leading
0
s. 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
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() }