首页 > 其他分享 >leedcode-数字转换为十六进制数

leedcode-数字转换为十六进制数

时间:2024-04-23 16:44:21浏览次数:29  
标签:十六进制 转换 binary 二进制 self leedcode add num internal

自己写的,先整数转二进制,再切片二进制转16进制

class Solution:
    def toHex(self, num: int) -> str:
        # 处理特殊情况:当 num 为 0 时,直接返回 '0'
        if num == 0:
            return '0'
        
        # 定义十六进制字母的映射关系
        my_dict = {10:'a', 11:'b', 12:'c', 13:'d', 14:'e', 15:'f'}
        
        res = ''  # 初始化结果字符串
        
        if num >= 0:  # 处理非负数的情况
            # 将整数转换为对应的二进制字符串
            bia_temp = self.posnumTobi(num)
            
            i = 0
            # 每次处理四位二进制数,共八组
            while i < 8:
                bia_internal = bia_temp[4*i : 4*(i+1)]  # 切片操作提取四位二进制数
                i += 1
                
                # 将四位二进制数转换为十进制数
                deci_internal = self.biToDecimal(bia_internal)
                
                # 如果十进制数小于等于9,则直接将其加入结果字符串中
                if deci_internal <= 9:
                    res = res + str(deci_internal)
                # 否则,使用映射关系获取十六进制字母,并加入结果字符串中
                else:
                    res = res + my_dict[deci_internal]
        
        elif num < 0:  # 处理负数的情况
            # 将负数转换为对应的补码表示的二进制字符串
            bia_temp = self.negnumTobi(num)
            i = 0
            while i < 8:
                bia_internal = bia_temp[4 * i : 4 * (i + 1)]  # 切片操作提取四位二进制数
                i += 1
                
                # 将四位二进制数转换为十进制数
                deci_internal = self.biToDecimal(bia_internal)
                
                # 如果十进制数小于等于9,则直接将其加入结果字符串中
                if deci_internal <= 9:
                    res = res + str(deci_internal)
                # 否则,使用映射关系获取十六进制字母,并加入结果字符串中
                else:
                    res = res + my_dict[deci_internal]
        
        # 删除结果字符串前面多余的零
        res = res.lstrip('0')
        return res

    # 将非负整数转换为32位的二进制字符串
    def posnumTobi(self, num):
        binary = ""
        while num > 0:
            binary = str(num % 2) + binary
            num //= 2
        add_length = 32 - len(binary)
        add_char = '0'
        binary = add_char * add_length + binary
        return binary

    # 将负整数转换为32位的二进制补码字符串
    def negnumTobi(self, num):
        num = abs(num)
        temp = self.posnumTobi(num)  # 绝对值的二进制
        binary = "".join('1' if x == '0' else '0' for x in temp)
        res = bin(int(binary, 2) + 1)[2:]
        return res

    # 将二进制字符串转换为十进制数
    def biToDecimal(self, bi_str):
        decimal = int(bi_str, 2)
        return decimal

 

标签:十六进制,转换,binary,二进制,self,leedcode,add,num,internal
From: https://www.cnblogs.com/yyyjw/p/18153200

相关文章

  • Qt short int 数组大小端转换(qbswap)
    在以下情形中,展示了如何将 shortint 数组从大端序转换为小端序,或者从小端序转换为大端序。1#include<iostream>2#include<cstdint>3intmain()4{5constexprintsize=4;6std::uint16_tarr[size]={0x1234,0x5678,0x9abc,0xdef0};7/......
  • leedcode-左叶子之和
    自己写的,使用了经典的广度优先搜素(BFS):classSolution:defsumOfLeftLeaves(self,root:Optional[TreeNode])->int:#初始化队列,将根节点放入队列中queue=[root]#初始化结果变量res=0#遍历队列,直到队列为空......
  • Python pytorch 坐标系变换与维度转换
    前言深度学习中经常要用到张量坐标系变换与维度转换,因此记录一下,避免混淆坐标系变换坐标系变换(矩阵转置),主要是调换tensor/array的维度pytorchimporttorchdefinfo(tensor):print(f"tensor:{tensor}")print(f"tensorsize:{tensor.size()}")print(f"tenso......
  • python中列表、字典和字符串的互相转换
    我们在python使用中经常会用到需要把字符串转为list或者字典,及把list或字典转为字符串(写文件,f.write()只能写字符串,插入数据库时,也只能用字符串)具体使用方法总结了一下:1、字符串转lists='a,b,c'l=s.split(',')  #把字符串s以逗号分割,分割出的list给到l ......
  • Python字节转换为字符串 - 如何将字符串转换为字节,以及反向转换
    你可以在Python中使用字节来表示二进制形式的数据。在本文中,你将学习如何将字节转换为字符串,以及反之亦然。在我们看转换之前,让我们谈谈Python中的字节是如何工作的。如果你已经理解了这一点,或者只是对转换感兴趣,你可以跳到下一节。(本文视频讲解:java567.com)Python中的字节是如......
  • ConvertLatOrLonFilter-经纬度格式转换-保留6位
    ConvertLatOrLonFilter-经纬度格式转换-保留6位/***转换经纬度*小数点最后最多为6位*@paramlatOrLon*@return*/privateStringconvertLatOrLon(StringlatOrLon){if(org.apache.commons.lang.StringUtils.isNotBlank(latOrLo......
  • js 小写转换,取后缀
    varstrfileExt=tmpFinanceReportFileName.substr(tmpFinanceReportFileName.lastIndexOf(".")).toLowerCase();    if(strfileExt!==".xls"&&strfileExt!=".xlsx"){      alertMsg.error('文件格式只能为Excel文件!&#......
  • 复杂属性转换器
    提示自己!具体为案例代码中的[属性Scope]和[类Scope]混淆产生两个不同内容但名字却相同的两个DLL!从而导致不能转换案例链接......
  • python中的时间转换,秒级时间戳转string,string转时间
    importtimeimportdatetimedefpaserTime(timestamp):t=time.time()f=time.localtime(timestamp/1000)print(t)#原始时间数据#print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级......
  • 十六进制字符串每隔32个字母换行显示
     //每32个字节换行打印publicstaticvoidformatPrint(StringhexStr){intno=0;intlength=hexStr.length();for(inti=0;i<length;i++){if((i+1)%32==0){Strings=twoSpaceTwo(hexStr.substring(i-31,i+1));System.out.println(......