算法题Python常用内置函数、方法、技巧汇总(其四:数字)

2023-12-26 17:28:36

数字相关操作

整除与求余

一般而言,我们使用整除运算//和求余运算%来计算两个整数相除的商和余数

div = 10 // 4
mod = 10 % 4

如果想要同时得到商和余数,可以直接使用内置函数divmod()来完成。

div, mod = divmod(10, 4)

取整

取整操作分为向上取整向下取整两种,这两个操作可以用python中的math内置库的ceil()函数和floor()函数来实现。ceilfloor的意思分别是天花板和地板,非常形象。

from math import ceil, floor

print(ceil(1.5))    # 得到2
print(ceil(-1.5))   # 得到-1

print(floor(1.5))   # 得到1
print(floor(-1.5))  # 得到-2

直接使用int(),也可以完成取整。对于正整数而言,int()是向下取整,对于负整数而言,int()是向上取整。即int()操作是一种向零截断的取整操作,或者说int()操作是对一个浮点数取其整数部分

print(int(1.5))    # 得到1
print(int(-1.5))   # 得到-1

注意取整后的值的数据类型是int而不是float

无穷大

某些题目在对变量进行初始化的时候,需要将其初始化为无穷大或者负无穷大,这可以用python中的math内置库的inf直接得到。

from math import inf

ans = inf
res = -inf

注意inf的数据类型是float而不是int

进制转换

最常用的进制是十进制,除此之外常用的进制还有二进制、八进制、十六进制。python中有丰富的内置函数来帮助我们实现不同进制之间的转换。

  • 十进制转其他进制

内置函数bin()oct()hex()能够非常方便地将一个整数num转化为其对应的二进制、八进制、十六进制字符串。

num = 20

# 20的二进制数是10100
# 输出0b10100,包含前缀"0b"
print(bin(num))
# 输出10100,用切片去除了前缀"0b"
print(bin(num)[2:])

# 20的八进制数是24
# 输出0o24,包含前缀"0o"
print(oct(num))
# 输出24,用切片去除了前缀"0o"
print(oct(num)[2:])

# 20的十六进制数是14
# 输出0x14,包含前缀"0x"
print(hex(num))
# 输出14,用切片去除了前缀"0x"
print(hex(num)[2:])

有几点需要注意:

  1. 转换后的数据类型是字符串而不是整数
  2. 字符串包含前缀"0b"/"0o"/"0x",表示是二/八/十六进制。
  3. 基于第二点,如果想要获得纯数字的转换,可以使用字符串的切片来实现效果。
  4. bin()oct()hex()分别是英文单词binary、octal、hexadecimal的缩写。

另外,在某些题目中,如OD真题【模拟】2023B-IPv4地址转换成整数 ,要求进制转换后的结果保持某一固定长度,这个可以用内置函数map()lambda匿名函数搭配来完成。

  • 其他进制转十进制

内置函数int()可以将一个字符串转化为一个十进制整数。

最常见的操作是将一个十进制字符串转化为十进制整数。

num_str = "100"

# 得到十进制的整数num = 100
num = int(num_str)

实际上,int()函数可以传入参数base,表示需要转换的原字符串num_str是用哪种进制来表示的。

num_str = "100"

# 得到从二进制数num_str转化的十进制数num_from_base2 = 4
num_from_base2 = int(num_str, base = 2)

# 得到从八进制数num_str转化而来的十进制数num_from_base8 = 64
num_from_base8 = int(num_str, base = 8)

# 得到从十六进制数num_str转化而来的十进制数num_from_base16 = 256
num_from_base16 = int(num_str, base = 16)

# 得到从七进制数num_str转化而来的十进制数num_from_base7 = 49
num_from_base7 = int(num_str, base = 7)

注意虽然常用的进制是二、八、十六进制,但base传入其他数字也是可以的。譬如选择base = 7,表示将一个七进制数字符串,转化为一个十进制整数。


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

文章来源:https://blog.csdn.net/weixin_48157259/article/details/135222909
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。