class Solution(object):
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
nums.sort()
result=[]
for i in range(0,len(nums)-3):
for x in range(len(nums)-1,2,-1):
cur,j,k,end=nums[i],i+1,x-1,nums[x]
if i>=1 and nums[i]==nums[i-1]:
continue #与前一个数相同就跳过,因为情况相同
while j<k:#左指针小于右指针
four_sum=cur+nums[j]+nums[k]+end
if four_sum>target:#如果四数之和大于target
k-=1#右指针往左移动一位
elif four_sum<target:#如果四数之和小于target
j+=1#左指针往右移动一位
else:#找到了和为target
if [cur,nums[j],nums[k],end] not in result:
result.append([cur,nums[j],nums[k],end])
j+=1#左指针向左移一位
k-=1#右指针向右移一位
return result
或者:
class Solution(object):
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
nums.sort()
result=[]
for i in range(0,len(nums)-3):
for x in range(len(nums)-1,2,-1):
cur,j,k,end=nums[i],i+1,x-1,nums[x]
if i>=1 and nums[i]==nums[i-1]:
continue #与前一个数相同就跳过,因为情况相同
if x<=len(nums)-2 and nums[x]==nums[x+1]:
continue #与前一个数相同就跳过,因为情况相同
while j<k:#左指针小于右指针
four_sum=cur+nums[j]+nums[k]+end
if four_sum>target:#如果四数之和大于target
k-=1#右指针往左移动一位
elif four_sum<target:#如果四数之和小于target
j+=1#左指针往右移动一位
else:#找到了和为0
if result==[] or [cur,nums[j],nums[k],end]!=result[-1]:
result.append([cur,nums[j],nums[k],end])
j+=1#左指针向左移一位
k-=1#右指针向右移一位
return result