【代码随想录】202. 快乐数 |454. 四数相加 II

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.三数之和,还是简单了不少

本题解题步骤:

  1. 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 再遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
  5. 最后返回统计值 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的原生数据结构是语言内置提供的,无需额外安装即可使用。主要包括以下几种:

  1. 列表(List)
    • 列表是一种有序的数据集合,可以随时添加、删除或修改其元素。
    • 使用方括号[]表示,元素可以是任何类型的数据。
    • 支持索引、切片、添加(append)、插入(insert)、删除(remove、pop)、排序(sort)、反转(reverse)等操作。
  2. 元组(Tuple)
    • 元组是一种不可变序列,一旦创建就不能添加、删除或修改其元素。
    • 使用圆括号()表示,通常用于存储异构数据。
    • 元组的大小和元素类型在创建时就已经确定,之后不能更改。
  3. 集合(Set)
    • 集合是一个无序的、不包含重复元素的集合类型。
    • 使用大括号{}表示(但注意,空集合必须使用set()表示,因为{}会被解释为空字典)。
    • 支持集合运算,如并集(union)、交集(intersection)、差集(difference)、对称差集(symmetric_difference)等。
  4. 字典(Dictionary)
    • 字典是一种映射数据结构,通过键(key)来访问值(value)。
    • 使用花括号{}表示,键必须是唯一的,而值可以是任何类型的数据。
    • 字典中的元素是无序的,但可以通过键快速访问对应的值。

二、第三方库提供的数据结构

除了Python的原生数据结构外,许多第三方库也提供了丰富的数据结构,以适应更复杂的编程需求。以下是几个常用的第三方库及其提供的数据结构:

  1. NumPy
    • 数组(Ndarray):NumPy库中的数组对象是一个多维的、固定大小的、同类型元素的数组。相比Python原生列表,NumPy数组在存储和计算上更加高效。
    • 矩阵(Matrix):虽然NumPy主要使用数组来表示数据,但也可以通过特定的函数或操作来模拟矩阵的行为。不过,在NumPy中更推荐使用数组来处理矩阵相关的计算。
  2. Pandas
    • 序列(Series):Pandas中的序列是一种一维的、固定长度的、可变的、有索引的数据结构,可以看作是一个带标签的数组。
    • 数据框(DataFrame):DataFrame是Pandas中最重要的数据结构之一,它是一个二维的、表格型的数据结构,可以看作是由多个Series组成的字典(每个Series都是一个列)。DataFrame既有行索引也有列索引,支持复杂的数据操作和分析。
  3. collections模块
    • Python的collections模块提供了许多有用的容器数据类型,如deque(双端队列)、Counter(计数器)、OrderedDict(有序字典)、defaultdict(带有默认值的字典)等。这些数据结构在特定场景下非常有用,可以大大简化代码和提高效率。

综上所述,Python的数据结构丰富多样,包括原生数据结构和第三方库提供的数据结构。在实际编程中,应根据具体需求选择合适的数据结构来提高代码的效率和可读性。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值