1. 程式人生 > >【LeetCode 簡單題】90-數字轉換為十六進位制數

【LeetCode 簡單題】90-數字轉換為十六進位制數

宣告:

今天是第90道題。給定一個整數,編寫一個演算法將這個數轉換為十六進位制數。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個整數,編寫一個演算法將這個數轉換為十六進位制數。對於負整數,我們通常使用 補碼運算 方法。

注意:

  1. 十六進位制中所有字母(a-f)都必須是小寫。
  2. 十六進位制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元'0'來表示;對於其他情況,十六進位制字串中的第一個字元將不會是0字元。 
  3. 給定的數確保在32位有符號整數範圍內。
  4. 不能使用任何由庫提供的將數字直接轉換或格式化為十六進位制的方法。

示例 1:

輸入:
26

輸出:
"1a"

示例 2:

輸入:
-1

輸出:
"ffffffff"

解法1。對num逐次取低4位然後把對應的值對映到0-15並寫入到字串res中,最後返回res的逆序,程式碼如下。

執行用時: 44 ms, 在Convert a Number to Hexadecimal的Python3提交中擊敗了96.39% 的使用者

class Solution:
    def toHex(self, num):
        """
        :type num: int
        :rtype: str
        """
        if num < 0:
            num += 0x100000000
        if num == 0:
            return '0'
        res = ''
        hexVal = '0123456789abcdef'
        while num:
            val = num&0xf    # 這個地方可以把0xf換成15,但會拖慢速度
            res += hexVal[val]
            num = num >> 4 if num > 0 else (num+0x100000000) >> 4
        return res[::-1]

解法2。和解法1無異,就是把位運算換成取餘,貌似這樣慢很多,程式碼如下。

執行用時: 52 ms, 在Convert a Number to Hexadecimal的Python3提交中擊敗了29.52% 的使用者 

class Solution:
    def toHex(self, num):
        """
        :type num: int
        :rtype: str
        """
        if num < 0:
            num += 0x100000000
        if num == 0:
            return '0'
        res = ''
        hexVal = '0123456789abcdef'
        while num:
            val = num % 16
            res += hexVal[val]
            num //= 16
        return res[::-1]

結尾

解法1&解法2:LeetCode