leetcode 405题

Posted by franki on October 8, 2022

leetcode 405题 数字转换为十六进制数

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

注意:

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

示例1

输入:
26

输出:
"1a"

示例2

输入:
-1

输出:
"ffffffff"

思路

通过不断整除16获取当前余数获取对应的十六进制数,知道循环 num 不大于0,最终把暂存的结果倒序返回

代码

/**
 * @param {number} num
 * @return {string}
 */
var toHex = function(num) {
    if (num === 0) {
        return '0';
    }

    if (num < 0) {
        num = Math.pow(2, 32) - Math.abs(num);
    }

    const map = {
        '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',
    };

    const bitArr = [];
    while (num > 0) {
        bitArr.push(map[num % 16]);
        num = Math.floor(num / 16);
    }

    return bitArr.reverse().join('');
};

复杂度分析:

  • 时间复杂度: O(N)
  • 空间复杂度:O(N)