#三数之和双指针循环外再加一个循环,但有些细节还是在里面的,需注意
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
res = [] #设置空列表做返回值
if len(nums)<4 :
return res
if len(nums)==4 and nums[0]+nums[1]+nums[2]+nums[3]==target:
return [nums]
nums.sort() #还是需要排序(从小到大)
i=0
while i<len(nums)-3:#for循环也可
j=i+1
while j<len(nums)-2:
l,r = j+1,len(nums)-1
while l<r:
quadruplets = [nums[i],nums[j],nums[l],nums[r]]
sum = nums[i]+nums[j]+nums[l]+nums[r]
if (sum == target) :
res.append(quadruplets)
while (l < len(nums) and quadruplets[2] == nums[l]): #此时不用if的原因是排除连续的重复值
l += 1
while (r > 0 and quadruplets[3] == nums[r]):
r-= 1
elif sum<target:
l+=1
else:
r-=1
while (j < len(nums) - 2 and nums[j] == nums[j + 1]):#排除j的重复值
j += 1
j += 1
while (i < len(nums) - 3 and nums[i] == nums[i + 1]):#排除i的重复值
i += 1
i += 1
return res