。。感觉做的很蠢。
主要就是看负数怎么处理。
举个例子,比如8位:
0111 1111 = 127
1111 1111 = -1
1000 0000 = -128
正常情况1111 1111应该是256,就是最大值127+最小值的绝对值128+1+num
其实点开那个提供的WIKI链接就一目了然了。。
用LONG是怕溢出
public class Solution {
char[] b = new char[16];
public String toHex(int num)
{
if(num == 0) return "0";
long a = 0;
if(num < 0)
a = (long)Integer.MAX_VALUE+(-1)*(long)Integer.MIN_VALUE+num+1;
else
a = (long) num;
for(int i = 0; i < 10;i++) b[i] = (char)('0'+i);
b[10] = 'a';
b[11] = 'b';
b[12] = 'c';
b[13] = 'd';
b[14] = 'e';
b[15] = 'f';
return helper(a);
}
public String helper(long a)
{
String res = "";
while(a >= 16)
{
res += helper(a/16);
a%=16;
}
return res + b[(int)a];
}
}
二刷。
通刷这个题也卡了,次奥。
看了新的简单的做法。
我们可以把4位4位的来看NUM,因为4位bits代表的就是16进制。
右移要用>>>而不是>>,因为后者会帮你添加符号,而我们恰好不能让它这么做。。因为16禁止最后是没符号的。
public class Solution {
public String toHex(int num) {
if(num == 0) return "0";
StringBuilder sb = new StringBuilder();
char[] digits = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; // map
while(num != 0){
sb.append(digits[(num & 15)]);
num = num >>> 4;
}
return sb.reverse().toString();
}
}
顺便,cnblog该如何搜搜发过的随笔。。