1. 题目

2. 思路
(1) 分组计算
- 每4位二进制位组成1位十六进制位,因此将整数转换成二进制位后进行分组,计算每组对应的十六进制位的值,最后拼接字符串即可。
(2) 位运算
- 与(1)的思想基本相同,计算每组对应的十六进制位的值可以使用位运算代替,将每组二进制位按照其位置右移到最低的四位,然后与0xf作与运算就可以直接得到该组的值,最后将其转换成十六进制即可。
3. 代码
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public String toHex(int num) {
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(0, "0");
put(1, "1");
put(2, "2");
put(3, "3");
put(4, "4");
put(5, "5");
put(6, "6");
put(7, "7");
put(8, "8");
put(9, "9");
put(10, "a");
put(11, "b");
put(12, "c");
put(13, "d");
put(14, "e");
put(15, "f");
}};
String s = Integer.toBinaryString(num);
StringBuilder binary = new StringBuilder();
int count = 4 - s.length() % 4;
if (count < 4) {
while (count > 0) {
binary.append('0');
count--;
}
}
binary.append(s);
StringBuilder res = new StringBuilder();
count = 0;
int index;
int sum;
while (count < binary.length() / 4) {
index = 0;
sum = 0;
while (index < 4) {
if (binary.charAt(count * 4 + index) == '1') {
sum += Math.pow(2, 3 - index);
}
index++;
}
res.append(map.get(sum));
count++;
}
return res.toString();
}
}
class Solution1 {
public String toHex(int num) {
if (num == 0) {
return "0";
}
Map<Integer, String> map = new HashMap<Integer, String>() {
{
put(0, "0");
put(1, "1");
put(2, "2");
put(3, "3");
put(4, "4");
put(5, "5");
put(6, "6");
put(7, "7");
put(8, "8");
put(9, "9");
put(10, "a");
put(11, "b");
put(12, "c");
put(13, "d");
put(14, "e");
put(15, "f");
}};
StringBuilder res = new StringBuilder();
int value;
for (int i = 7; i >= 0; i--) {
value = (num >>> (4 * i)) & 0xf;
if (value != 0 || res.length() != 0) {
res.append(map.get(value));
}
}
return res.toString();
}
}