“数字转换为十六进制数”1
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
“1a”
示例 2:
输入:
-1
输出:
“ffffffff”
考虑类似十进制转换为二进制数的方法,除进制位取余数拼接。这里增加的是32位存储位的有符号整数中,负数的存储格式:-1 = ffffffff。即须取补码。
@author: WowlNAN
"""
class Solution:
def toHex(self, num: int) -> str:
a=num
f=0
if a==0:
return '0'
elif a<0:
a=0-a
f=1
b=''
c={ 0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',
6:'6', 7:'7', 8:'8',9:'9',10:'a',
11:'b',12:'c',13:'d',14:'e',15:'f'}
if f==0:
a=0xffffffff&a
else:
# 取反-1: 因负数取反,故减1
a=0xffffffff^a-1
while a!=0:
b=str(c.get(a%0x10,''))+b
a//=0x10
return b
笔记:
这次十进制转换其它进制使用了Python的字典。字典的方法效率有改进方法,但是数据结构壮,代码简洁高效。
看了唯一快过的提交范例使用字符串代替字典,感觉还行。
它是这样的代码:
class Solution:
def toHex(self, num: int) -> str:
s="0123456789abcdef"
ans=""
flag = False
if num < 0:
s=s[::-1]
num=abs(num)-1
flag = True
while num >= 16:
ans+=s[num%16]
num = num//16
ans+=s[num]
if flag:
while len(ans)<8:
ans += "f"
return ans[::-1]
题目来源:力扣LeetCode ↩︎