202. 快乐数
divmod()
是 Python 中的一个内置函数,它接收两个参数(被除数和除数),并返回一个包含商和余数的元组(tuple)。这个函数非常有用,特别是在需要同时获取除法结果的整数部分和余数时。
函数的基本语法如下:
divmod(a, b)
a 是被除数。
b 是除数。
函数会返回 (a // b, a % b)
,其中 //
表示整数除法(向下取整),%
表示取模运算(即余数)
# 使用 divmod()
result = divmod(9, 2)
print(result) # 输出: (4, 1) 因为 9 除以 2 的商是 4,余数是 1
# 另一个示例
result = divmod(10, 3)
print(result) # 输出: (3, 1) 因为 10 除以 3 的商是 3,余数是 1
# 也可以用于浮点数,但结果会基于浮点数的除法规则
result = divmod(10.0, 3)
print(result) # 输出: (3.3333333333333335, 0.9999999999999998) 注意:这里的结果可能因浮点数的精度问题而略有不同
注意:虽然 divmod()
可以用于浮点数,但由于浮点数的精度问题,结果可能不如使用整数时直观或精确。
divmod
的发音可以根据其英文单词的组合来读,其中 div
来自 "division"(除法)的缩写,而 mod
来自 "modulus"(模数或余数)的缩写。因此,可以将 divmod
读作类似于“divi-mod”或“div-ee-mod”的发音,但请注意这并不是一个标准的英语单词,所以发音上可能会有一定的灵活性。
python代码:
class Solution:
def isHappy(self, n: int) -> bool:
record = set()
while True:
n = self.get_sum(n)
if n == 1:
return True
elif n in record:
return False
else:
record.add(n)
def get_sum(self, n: int) -> int:
new_sum = 0
while n:
n,r = divmod(n,10) # 使用 divmod() 获取 n 除以 10 的商和余数
new_sum += r**2
return new_sum
# 由于 divmod() 在每次迭代时都会更新 n 为 n 除以 10 的商,所以循环结束时 n 会是 0
# 而 new_num 则是 n 的每一位数字的平方和
# 上述代码,它实际上计算的是从 n 的最低位到最高位每一位的平方和(反向顺序)
# 如果需要得到原始的 n 的每一位数字的平方和(而不是从低位到高位的顺序),
# 需要存储每一位的余数,并在循环后计算它们的平方和
454. 四数相加 II
不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少
本题解题步骤:
- 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
- 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
- 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
- 再遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
- 最后返回统计值 count 就可以了
python 代码:
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
hashmap = dict()
for i in nums1:
for j in nums2:
if i + j in hashmap:
hashmap[i+j] += 1
else:
hashmap[i+j] = 1
count = 0
for i in nums3:
for j in nums4:
key = -i-j
if key in hashmap:
count += hashmap[key]
return count
Python数据结构:
一、原生数据结构
Python的原生数据结构是语言内置提供的,无需额外安装即可使用。主要包括以下几种:
- 列表(List)
- 列表是一种有序的数据集合,可以随时添加、删除或修改其元素。
- 使用方括号
[]
表示,元素可以是任何类型的数据。 - 支持索引、切片、添加(append)、插入(insert)、删除(remove、pop)、排序(sort)、反转(reverse)等操作。
- 元组(Tuple)
- 元组是一种不可变序列,一旦创建就不能添加、删除或修改其元素。
- 使用圆括号
()
表示,通常用于存储异构数据。 - 元组的大小和元素类型在创建时就已经确定,之后不能更改。
- 集合(Set)
- 集合是一个无序的、不包含重复元素的集合类型。
- 使用大括号
{}
表示(但注意,空集合必须使用set()
表示,因为{}
会被解释为空字典)。 - 支持集合运算,如并集(union)、交集(intersection)、差集(difference)、对称差集(symmetric_difference)等。
- 字典(Dictionary)
- 字典是一种映射数据结构,通过键(key)来访问值(value)。
- 使用花括号
{}
表示,键必须是唯一的,而值可以是任何类型的数据。 - 字典中的元素是无序的,但可以通过键快速访问对应的值。
二、第三方库提供的数据结构
除了Python的原生数据结构外,许多第三方库也提供了丰富的数据结构,以适应更复杂的编程需求。以下是几个常用的第三方库及其提供的数据结构:
- NumPy
- 数组(Ndarray):NumPy库中的数组对象是一个多维的、固定大小的、同类型元素的数组。相比Python原生列表,NumPy数组在存储和计算上更加高效。
- 矩阵(Matrix):虽然NumPy主要使用数组来表示数据,但也可以通过特定的函数或操作来模拟矩阵的行为。不过,在NumPy中更推荐使用数组来处理矩阵相关的计算。
- Pandas
- 序列(Series):Pandas中的序列是一种一维的、固定长度的、可变的、有索引的数据结构,可以看作是一个带标签的数组。
- 数据框(DataFrame):DataFrame是Pandas中最重要的数据结构之一,它是一个二维的、表格型的数据结构,可以看作是由多个Series组成的字典(每个Series都是一个列)。DataFrame既有行索引也有列索引,支持复杂的数据操作和分析。
- collections模块
- Python的collections模块提供了许多有用的容器数据类型,如
deque
(双端队列)、Counter
(计数器)、OrderedDict
(有序字典)、defaultdict
(带有默认值的字典)等。这些数据结构在特定场景下非常有用,可以大大简化代码和提高效率。
- Python的collections模块提供了许多有用的容器数据类型,如
综上所述,Python的数据结构丰富多样,包括原生数据结构和第三方库提供的数据结构。在实际编程中,应根据具体需求选择合适的数据结构来提高代码的效率和可读性。