LeetCode刷题之405.数字转换为十六进制数

LeetCode刷题之405.数字转换为十六进制数

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码 运算方法。
  • 注意
  1. 十六进制中所有字母(a-f)都必须是小写。
  2. 十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
  3. 给定的数确保在32位有符号整数范围内。
  4. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
  • 示例
示例 1:
输入:26
输出:"1a"
示例 2:
输入:-1
输出:"ffffffff"
  • 代码:
class Solution:
    def toHex(self, num: int) -> str:
        def fun(num):
            zidian = {10:'a',
                      11:'b',
                      12:'c',
                      13:'d',
                      14:'e',
                      15:'f'}
            result = []
            while num >= 16:
                temp = num % 16
                if temp >= 10:
                    result.insert(0,zidian[temp])
                    num = num // 16
                    continue
                result.insert(0,str(temp))
                num = num // 16
            if num >= 10:
                result.insert(0,zidian[num])
            else:
                result.insert(0,str(num))
            return(''.join(result))
        if num >= 0:
            return(fun(num))
        if num < 0:
            temp = 2 ** 32 -1
            return(fun((temp ^ (-num))+1))
# 执行用时 :48 ms, 在所有 Python3 提交中击败了61.08%的用户
# 内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.06%的用户
  • 算法说明:
    建立一个求补码的函数fun();函数中建立一个字典,存储10-15的16进制字符;然后在数字num不小于16的条件下,逐步求取num对16的余数temp,将余数temp从头部插入到列表result中,如果余数大于9,则用字典中的值代替,返回result。如果num>=0,直接调用fun()函数;如果小于0,则将num与2的32次方减1,即二进制的‘1111111111111111111111111111111’或者十进制的‘4,294,967,295’‬进行异或操作,即将num按位取反,然后加1,得到补码,然后调用fun()函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

O_胡萝卜_O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值