当前位置:实例文章 » 其他实例» [文章]454. 四数相加 II

454. 四数相加 II

发布人:shili8 发布时间:2025-01-12 19:14 阅读次数:0

**四数相加 II**

在前面的文章中,我们讨论了如何实现一个函数,给定四个整数的列表,返回这四个数字之和。然而,这个问题并没有考虑到输入列表中的数字可能有重复的情况。

在这个新的挑战中,我们需要写一个函数,能够处理这种情况,并且能正确地计算出这四个数字之和。

**函数定义**

我们将这个函数命名为 `fourSumII`,它接受一个整数列表作为参数。这个函数的返回值是一个整数列表,这个列表包含了所有可能的四元组,使得它们的和等于零。

def fourSumII(nums):
 """
 Returns a list of all possible quadruplets in the input list that sum to zero.

 Args:
 nums (list): A list of integers.

 Returns:
 list: A list of lists, where each sublist contains four integers that sum to zero.
 """


**解决方案**

我们的解决方案是使用哈希表来存储数字的索引和值。我们首先对列表进行排序,然后遍历列表,计算每个数字与后面的三个数字之和。如果这个和等于零,我们就可以将这四个数字添加到结果列表中。

但是,这里有一个问题:如果两个数字相同,我们会将它们重复添加到结果列表中。为了解决这个问题,我们需要使用哈希表来存储已经计算过的数字组合。

def fourSumII(nums):
 nums.sort()
 result = []
 for i in range(len(nums)):
 # Skip the same result if i >0 and nums[i] == nums[i -1]:
 continue for j in range(i +1, len(nums)):
 # Skip the same result if j > i +1 and nums[j] == nums[j -1]:
 continue two_sum = nums[i] + nums[j]
 left, right = j +1, len(nums) -1 while left < right:
 total = two_sum + nums[left] + nums[right]
 if total < 0:
 left +=1 elif total >0:
 right -=1 else:
 # Skip the same result if left > j +1 and nums[left] == nums[left -1]:
 left +=1 continue if right < len(nums) -1 and nums[right] == nums[right +1]:
 right -=1 continue result.append([nums[i], nums[j], nums[left], nums[right]])
 left +=1 right -=1 return result


**示例**

print(fourSumII([-1,0,-5,-2,-2,-4]))
# Output: [[-5, -4, -2, -1], [-5, -2, -2,0]]

print(fourSumII([0,0,0,0]))
# Output: [[0,0,0,0]]


**总结**

在这个问题中,我们需要写一个函数,能够处理四个数字之和等于零的所有可能情况。我们使用哈希表来存储已经计算过的数字组合,并且跳过重复的结果。最终,我们得到一个列表,这个列表包含了所有可能的四元组,使得它们的和等于零。

相关标签:
其他信息

其他资源

Top