1.双指针
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
res=[]
nums.sort()
if(len(nums)==0):return []
for i in range(len(nums)-3):
# 去重
if( i>0 and nums[i]==nums[i-1]):
continue
newtarget=target-nums[i]
for j in range(i+1,len(nums)-2):
# 去重
if(j>i+1 and nums[j]==nums[j-1]):
continue
newtarget2=newtarget-nums[j]
l=j+1
r=len(nums)-1
while(l<r):
if(nums[l]+nums[r]==newtarget2):
res.append([nums[i],nums[j],nums[l],nums[r]])
while(l<r and nums[l]==nums[l+1]):
l+=1
while(l<r and nums[r] ==nums[r-1]):
r-=1
l+=1
r-=1
elif(nums[l]+nums[r]<newtarget2):
l+=1
else:
r-=1
return res
2.递归