欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 08:54:50
...

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()函数。