405数字を16進数に変換

2103 ワード

質問:
整数を指定し、アルゴリズムを記述してこの数を16進数に変換します.負の整数については,通常,符号化演算法を用いる.
注意:
  • 16進数のすべてのアルファベット(a-f)は小文字でなければならない.
  • の16進数文字列には、余分なプリアンブルゼロは含まれません.変換する数が0の場合、単一の文字'0'で表されます.その他の場合、16進数文字列の最初の文字は0文字ではありません. 
  • で与えられた数は、32ビットの符号付き整数の範囲内であることを保証する.
  • では、ライブラリによって提供される数値を16進数に直接変換またはフォーマットする方法は使用できません. 

  • ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
    考え方:16の整備と取余
    class Solution:
        code = [str(i) for i in range(10)]+['a', 'b', 'c', 'd', 'e', 'f']
        
        def toHex(self, num: int) -> str:
            code_index = dict([(self.code[i], i) for i in range(16)])
            code_str = dict([(i, self.code[i]) for i in range(16)])
            L = 8
            sign = 1
            string = ['0' for i in range(8)]
            if num < 0:
                sign = -1
                num = -num
                
            for i in range(L):
                string[L-i-1] = code_str[num % 16]
                num = num // 16
                if num == 0:
                    break
            #print(string)
            
            if sign == -1:
                l = len(string)
                s = 1
                string[0] = '8'
    
                for i in range(L):
                    item = string[L-i-1]
                    new_index = 15 - code_index[item] + s
                    s = new_index // 16
                    if L-i-1 == 0:
                        if new_index + 8 == 16:
                            string[L-i-1] = '8'
                        else:
                            string[L-i-1] = code_str[(new_index + 8) % 16]
                    else:
                        string[L-i-1] = code_str[new_index % 16]
            #print(string)
            result = ''
            t = 0
            for s in string:
                if s == '0' and t == 0:
                    continue
                result = result + s
                t = 1
            if result == '':
                result = '0'
            return result
    
                    

    実行時間:36 ms
    メモリ消費量:13.8 MB