【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

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/84034109