LeetCode 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. 数字范围按位与 | 中等 | 位运算 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!