iT邦幫忙

0

leetcode with python:405. Convert a Number to Hexadecimal

  • 分享至 

  • xImage
  •  

題目:

Given an integer num, return a string representing its hexadecimal representation. For negative integers, two’s complement method is used.

All the letters in the answer string should be lowercase characters, and there should not be any leading zeros in the answer except for the zero itself.

Note: You are not allowed to use any built-in library method to directly solve this problem.

給定一數,將其轉為16進位制

這題比較需要特別注意的點大概是負數的處理吧

class Solution:
    def toHex(self, num: int) -> str:
        if num==0: #防止num=0
            return "0"
        if num<0: #負數轉換
            num=num+2**32
        ans=""
        d={10:'a',11:'b',12:'c',13:'d',14:'e',15:'f'}#10~15的對應表示
        
        while num:
            
            temp=num%16
            
            if temp>9:
                ans=d[temp]+ans
            else:
                ans=str(temp)+ans
                
            num=num//16
            
        return ans

十六進位負數的表示是將其+2^32後再進行轉換
將num不斷%16,//16找出每一位的值
再將其組合為字串回傳
最後執行時間31ms(faster than 91.59%)

上面那個解不是這題的重點
我在討論區看到使用位元運算的解
我認為這才是這題的最佳解

class Solution:
    def toHex(self, num: int) -> str:
        if num==0: 
            return '0'
        s = '0123456789abcdef' 
        
        ans = ''
        for i in range(8):
            x=num & 15      
            temp =s[x]           
            ans = temp + ans
            num = num >> 4
            
        return ans.lstrip('0')

我們可以發現2進位每4位剛好可以判斷16進位的一位
於是我們將其&15(1111),剛好可以得到末四位代表的值
之後>>4,看下一個4位組合代表的值
由於我們知道二進位表示最多有32位(測資限制)
所以迴圈跑8次(8 * 4=32)
將每4位值對應的字元一一放入ans空字串
最後將ans左端的0全部去除後回傳
最後執行時間19ms(faster than 99.89%)

明天起幾天會出遊,應該會斷更個3,4天吧
小休一下

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言