leedcode-數字轉換為十六進位制數

Junior_bond發表於2024-04-23

自己寫的,先整數轉二進位制,再切片二進位制轉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

相關文章