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

题目描述

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

思路分析

解法一:位运算转换(推荐)

核心思路

  • 十六进制每一位对应 4 个二进制位。
  • 不断取低 4 位作为当前字符,然后无符号右移 4 位。
  • 对于负数,使用无符号右移保证最高位补 0。


复杂度分析

  • 时间复杂度:O(1),最多处理 8 个十六进制位。
  • 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
    public String toHex(int num) {
        if (num == 0) {
            return "0";
        }

        char[] hex = "0123456789abcdef".toCharArray();
        StringBuilder sb = new StringBuilder();

        // 每次取 4 位
        while (num != 0) {
            int v = num & 0xf;
            sb.append(hex[v]);
            num >>>= 4;
        }

        return sb.reverse().toString();
    }
}
func toHex(num int) string {
	if num == 0 {
		return "0"
	}

	hex := "0123456789abcdef"
	res := make([]byte, 0)

	// 用无符号数处理负数
	v := uint32(num)
	for v != 0 {
		d := v & 0xf
		res = append(res, hex[d])
		v >>= 4
	}

	for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 {
		res[l], res[r] = res[r], res[l]
	}
	return string(res)
}

相似题目

题目 难度 考察点
504. 七进制数 简单 进制转换
190. 颠倒二进制位 简单 位运算
191. 位 1 的个数 简单 位运算
231. 2 的幂 简单 位运算
201. 数字范围按位与 中等 位运算
本文作者:
本文链接: https://hgnulb.github.io/blog/2021/85998500
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!