返回
LeetCode破解:重新认识整除的意义
后端
2023-12-21 12:40:18
## LeetCode破解:重新认识整除的意义
大家好,我是LeetCode的资深玩家,今天我来分享一道LeetCode题目,这道题是关于整除的。整除在数学中是一个非常基本的概念,但在LeetCode中,整除的意义往往与我们通常理解的有所不同。这道题目正是考察了这一点。
## 题目
给你一个整数数组nums和一个整数k,你需要找出数组中所有的子数组,使得这些子数组的元素之和是k的整数倍。
## 示例1:
输入:nums = [4, 5, 0, -2, -3, 1], k = 5
输出:[[0], [4, 1]]
## 示例2:
输入:nums = [1, 2, 3], k = 5
输出:[]
## 思路分析
首先利用测试用例搞清楚题目中的除法是指整除而非向下取整,然后看看我们通常理解的整除和LeetCode中的整除有什么不同。
我们通常理解的整除是指两个整数相除,余数为0。例如,10除以2,余数为0,所以10是2的整数倍。但是在LeetCode中,整除的意义有所不同。在LeetCode中,整除是指两个整数相除,余数为0或1。例如,10除以3,余数为1,所以10是3的整数倍。
知道了这一点,我们就可以轻松地解决这道题目了。我们只需要遍历数组,并计算每个子数组的元素之和。如果某个子数组的元素之和是k的整数倍,那么我们就将这个子数组添加到结果列表中。
## 代码实现
```python
def subarraySum(nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
# 用来存储子数组和的字典
sum_dict = {}
# 将0加入字典,因为空数组的和也是k的倍数
sum_dict[0] = 1
# 用来存储子数组的和
current_sum = 0
# 用来存储结果列表
result = []
# 遍历数组
for num in nums:
# 更新子数组的和
current_sum += num
# 如果当前子数组的和减去k是某个子数组的和,那么就说明找到了一个符合条件的子数组
if current_sum - k in sum_dict:
# 将符合条件的子数组添加到结果列表中
result.extend(sum_dict[current_sum - k])
# 将当前子数组的和加入字典
if current_sum not in sum_dict:
sum_dict[current_sum] = []
sum_dict[current_sum].append(current_sum)
# 返回结果列表
return result
结语
希望这篇文章对您有所帮助。如果您在LeetCode中遇到任何问题,欢迎随时与我联系。