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

ops/2024/10/31 14:16:22/
【力扣题】题目描述:

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

数字等于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(列表):将列表转为字符串。间隔符可以为空。

python">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。依次获得一位十六进制位。

python">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'是十六进制的开头标识。

python">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开始。

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


http://www.ppmy.cn/ops/129884.html

相关文章

C++中的string类

目录 一.C与C的string比对 二.string类的使用 与构造相关的函数&#xff08;copy control&#xff09; 访问及遍历操作&#xff08;access&#xff09; 容量操作&#xff08;capacity&#xff09; 修改操作&#xff08;modify&#xff09; 非成员函数&#xff08;non-memb…

工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

目录 工厂模式的类型 工厂模式的优点 工厂模式的缺点 适用场景 1. 简单工厂模式示例 2. 工厂方法模式示例 3. 抽象工厂模式示例 总结 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方…

Java面试经典 150 题.P274. H 指数(011)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int hIndex(int[] citations) {int…

如何编写一个高效的Java工具类

在Java开发中&#xff0c;工具类的编写是提高代码复用性和可维护性的重要手段。特别是在使用Spring Boot框架时&#xff0c;工具类的合理应用可以极大地提升开发效率。本文将深入探讨如何编写一个高效的Java工具类&#xff0c;并结合Spring Boot与IRIS数据库的集成&#xff0c;…

前端笔面试查漏补缺

面试笔试的知识总结&#xff0c;查漏补缺 一、CSS样式隔离 CSS样式隔离用于确保组件或元素的样式不会与其他组件或元素的样式发生冲突。 1.scoped css -- <style scoped> 构建工具&#xff08;vue-loader&#xff09;会在编译阶段对css特殊处理&#xff0c;给当前组…

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件&#xff0c;准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验&#xff0c;那么拆装调整相机挺麻烦的。 准备直接在电…

ffmpeg 提取mp4文件中的音频文件并保存

要从一个 MP4 文件中提取音频并保存为单独的音频文件&#xff0c;可以使用 ffmpeg 工具。以下是一个简单的命令示例&#xff1a; 命令格式 ffmpeg -i input.mp4 -vn -acodec copy output.mp3 参数解释 -i input.mp4: 指定输入文件为 input.mp4。 -vn: 禁用视频流&#xff0…

(11)(2.1.6) Hobbywing DroneCAN ESC(一)

文章目录 前言 1 连接和配置 2 参数说明 前言 具有 CAN 接口&#xff08;including these&#xff09;的业余 ESC 支持 DroneCAN&#xff0c;它允许自动驾驶仪通过 CAN 控制 ESC /电机&#xff0c;并检索单个转速、电压、电流和温度。 具有 CAN 接口&#xff08;including …