当前位置: 首页 > news >正文

【Python3】【力扣题】405. 数字转换为十六进制数

【力扣题】题目描述:

题意理解:(不允许使用库函数)

数字等于0,则结果为0,

数字小于0,则补码运算,即最高位(32位)为1,其余全部取反,再加1。相当于2的32次方+负数。

数字大于0,则计算十六进制(解题思路里详细说明)。

注:十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。

(在ASCII码,a对应97)

【Python3】代码:

1、解题思路:基于“题意理解”,数字大于0,求与16的余数,小于10则直接字符串,大于等于10,转为小写字母。与16的商继续求余数,直到数字为0。

知识点:num % 16:求与16的余数,即num除以16的余数。

               str(...):转为字符串。

               chr(...):将整数转为ASCII中对应字符。

               [ ]:空列表。列表:有序、元素可重复、可变的序列。

               列表.append(...):往列表末尾中添加元素。

               列表.reverse( ):列表倒置,即列表起始元素在末尾,末尾元素在起始位置。

               "间隔符".join(列表):将列表转为字符串。间隔符可以为空。

class Solution:def toHex(self, num: int) -> str:if num == 0: return "0"# 负数:(补码运算)最高位为1,其余全部取反再加1# (32位)相当于:2的32次方-负数的绝对值,即2的32次方+负数if num < 0: num += 2 ** 32res = []while num != 0:# 依次求余数m = num % 16# 余数小于10则直接转为字符串if m < 10: astr = str(m)# 余数大于等于10,则转为对应小写字母,(97对应小写字母a)else: astr = chr(m - 10 + 97)res.append(astr)# 求商,继续下一轮求余数num = num // 16# 结果列表倒置res.reverse()return ''.join(res)

2、解题思路:一个十六进制位对应4个二进制位。32位二进制,即8位十六进制,从高到低(从左到右),依次将数字右移4位的倍数与十六进制最大值f进行与运算,依次获得对应的十六进制位。

知识点:num >> n:num二进制右移n位。

              num & 15:num与15(即十六进制最大值f)进行二进制与运算。二进制位依次与运算,相同为1,其余为0。依次获得一位十六进制位。

class Solution:def toHex(self, num: int) -> str:if num == 0: return "0"res = []for i in range(7,-1,-1):# 二进制右移,与16进制最大值f求与运算,依次获取一个16进制位val = (num >> (4 * i)) & 15if len(res) > 0 or val > 0:# 小于10则转为字符串,大于等于10则转为对应字母astr = f"{val}" if val < 10 else f"{chr(val - 10 + 97)}"res.append(astr)return ''.join(res)

3、补充:使用库函数,不在本题解题范围之内(本题不允许使用库函数)

(3-1)解题思路:python中库函数format可以将整数转为十六进制。

知识点:1 << 32:1左移32位,相当于2的32次方即2 ** 32。

               format(...):字符串格式化。'Ox'是十六进制的开头标识。

class Solution:def toHex(self, num: int) -> str:# 小于0,补码运算if num < 0: num += (1 << 32)# 其余,使用format函数转换return format(num, '0x')

(3-2)解题思路:python中库函数hex可以将十进制转为十六进制。

知识点:hex(...):将十进制转为十六进制。返回结果中含开头标识'Ox'。

               序列[2:]:序列(字符串、列表等)中获取从下标2(含)到最后的元素。下标从0开始。

class Solution:def toHex(self, num: int) -> str:# 小于0,补码运算if num < 0: num += (1 << 32)# 其余,使用hex函数转换,去除开头标识'Ox'return hex(num)[2:]

http://www.lryc.cn/news/473948.html

相关文章:

  • 记录一次企业外部通过ssh 连接数据库的事DBeaver
  • 中聚企服:中聚AI女娲大模型,企业难题迎刃而解!
  • 对镜像精简
  • 老电脑不能装纯净版windows
  • 在Python中实现一个简单的社交媒体应用
  • pytest高版本兼容test_data[“log“] = _handle_ansi(“\n“.join(logs))错误
  • Redis技术入门与实践指南
  • 如何一键完成20个Oracle实例运维脚本部署
  • 【C++刷题】力扣-#598-区间加法 II
  • 优雅的LUA数据记录方法-serpent序列化+LUA Table
  • 初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
  • Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)
  • C#整合Ollama实现本地LLMs调用
  • C++基于opencv的视频质量检测--图像抖动检测
  • Cuda By Example - 11 (Texture Memory 2-D)
  • Go匿名结构体使用场景
  • Vue 发布十年了!你知道我这十年是怎么过的吗?
  • Unity 6 来袭
  • SpringMVC课时1
  • 【小白学机器学习30】样本统计的核心参数:均值/期望,方差,标准差,标准值。
  • flink1.17.2安装和使用
  • C向C++入门-- C语言填坑
  • 扫雷游戏(C语言详解)
  • 信刻全自动光盘摆渡系统
  • 计算机网络的数据链路层
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(三)SpringBoot接口统一返回和全局异常处理
  • Mybatis-plus-扩展功能
  • 【AI辅助】AWS Toolkit+AmazonQ
  • 云手机简述(概况,使用场景,自己部署云手机)
  • Java已死,大模型才是未来?