「每日LeetCode」2021年10月2日

本文最后更新于:2023年3月19日 晚上

Lt405. 数字转换为十六进制数

405. 数字转换为十六进制数

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:

  1. 十六进制中所有字母(a-f)都必须是小写。
  2. 十六进制字符串中不能包含多余的前导零。如果要转化的数为 0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是 0 字符。
  3. 给定的数确保在 32 位有符号整数范围内。
  4. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例 1:
输入: 26 输出: “1a”
示例 2:
输入: -1 输出: “ffffffff”

思路

用 0xf 按位求当前数的最右边四个数,在 map 中取到对应的字符。对于负数的解决方式有两个:一个是小于 0 时直接加上 2**32,在循环中使用有符号右移 4 位,符号位为 1;另一个是循环中采用无符号右移 4 位,符号位为 0;

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @param {number} num
* @return {string}
*/
var toHex = function (num) {
if (!num) return "0";
const string = "0123456789abcdef";
let res = "";
while (num) {
res = string[num & 0xf] + res;
num >>>= 4;
}
return res;
};