405. 数字转换为十六进制数
思路:位运算
题目要求将给定的整数转换为16进制,由于一位16进制数对应四位二进制数,因此32位有符号数的16进制有8位。将num的二进制数按照四位一组分为8组,依次将每一组转换为对应的16进制数,即可得到num的16进制数。
将每一组转换为16进制数的做法如下:
将(num>>(4*i))&0xf得到的值,如果[0:9],数字本身是16进制数。如果[10:15],需要转换为a到f的对应字母。
要考虑前导0,如果num为0,返回0.否则从第一个不是0的值开始拼接16进制数。
class Solution {
public:
string toHex(int num) {
if(num == 0)
return "0";
string sb;
for(int i=7;i>=0;i--){
int val=(num>>(4*i))&0xf;
if(sb.size()||val>0){
char digit=val<10?('0'+val):(char)('a'+val-10);
sb.push_back(digit);
}
}
return sb;
}
};
时间复杂度: O(k),其中k是16进制位数。
空间复杂度: O(k),其中k是16进制位数。