题目在这:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/
思路分析:
首先判断所给的N是正数还是负数,若为负数,则使用补码运算变成正数再进行运算。
所给负数和 0xffffffff
进行与运算 (即补码运算),然后变为十进制正数。
正常处理正整数:
所给为空的直接返回0。
N除以16不断取余,然后加入数组。
建立一个字典,将10-15 对应成a-e。
循环遍历数组,对应字典变换10-15。
最后翻转数组。
其中要注意列表和字符串的变换。题目最后接受的为字符串类型。
完整代码
class Solution:
def toHex(self, num: int) -> str:
if num == 0:
return str(0)
n = num
def A(n):
res = []
while n >0:
temp = n%16
res.append(temp)
n = n//16
hash_map = {10:'a',11:'b',12:'c',13:'d',14:'e',15:'f'}
res = res[::-1]
for i in range(len(res)):
if res[i] in hash_map:
res[i] = hash_map[res[i]]
ans = ''
for i in res:
ans +=str(i)
return ans
if n < 0:
r = bin(n & 0xffffffff)
r = int(r,2)
return A(r)
if n > 0:
return A(n)