Skip to main content

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

标签: math, bit-manipulation

难度: Easy

通过率: 49.86%

原题链接: https://leetcode.com/problems/convert-a-number-to-hexadecimal/description/

题目描述

给定一个32位整数 num,返回其对应的十六进制表示的字符串。对于负整数,使用补码表示。答案字符串中的字母应全部是小写字符,除了数字0本身不应有任何前导零。不得使用任何内置库方法直接解决此问题。

解题思路

要将一个32位整数转换为十六进制,我们需要逐步提取较低的4位进行转换,这可以通过重复除16(或取模)来实现。特别是在处理负数时,需要将其转换为无符号整数对应的补码形式,这可以通过将其与 0xFFFFFFFF\text{0xFFFFFFFF} 相与(使用位掩码)实现。然后逐步从右到左处理每4位,转换为十六进制字符并记录下来。直到 num 变为0,最后反转得到的结果字符串。

代码实现

def to_hex(num):
# 十六进制字符映射
hex_chars = "0123456789abcdef"
# 若为0则直接返回
if num == 0:
return "0"
# 处理负数,通过与0xFFFFFFFF相与得到无符号数
num &= 0xFFFFFFFF
# 存储结果
result = ""
# 循环直到整数为0
while num != 0:
# 提取最后4位并找到对应字符
result = hex_chars[num & 0xF] + result
# 右移4位
num >>= 4
return result

复杂度分析

时间复杂度:由于每次减少4位,最多执行8次,因此时间复杂度为 O(1)O(1)

空间复杂度:主要用于存储结果的字符串,也是 O(1)O(1)