https://leetcode.com/problems/4sum/description/
题目大意:给一个数组,求四个数的和等于target的所有组合(不重复)
解题思路:和15. 3Sum 差不多,3sum用了三个游标i,front,back。这里用四个:i,j,front,back。j从i+1开始到末尾,其他的同3sum的做法,用front和back夹逼即可
代码注意在i的while循环中夹着j的while循环
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
res = []
nums.sort()
i = 0
while i < len(nums):
j = i+1
while j < len(nums):
front = j + 1
back = len(nums) - 1
while front < back:
sum = nums[i] + nums[j] + nums[front] + nums[back]
if sum < target:
front += 1
elif sum > target:
back -= 1
else: #找到
quadruplet = [0] * 4 #创建四元组
quadruplet[0] = nums[i]
quadruplet[1] = nums[j]
quadruplet[2] = nums[front]
quadruplet[3] = nums[back]
res.append(quadruplet) #四元组写入
while front < back and quadruplet[2] == nums[front]:
front += 1
while front < back and quadruplet[3] == nums[back]:
back -= 1
while j+1 < len(nums) and nums[j] == nums[j+1]:
j += 1
j += 1 #end j while
while i+1 < len(nums) and nums[i] == nums[i+1]:
i += 1
i += 1 #end i while
return res