1. 三数之和
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
results = []
nums.sort()
length = len(nums)
for i in range(length-2):
left = i+1
right = length-1
while left < right:
sums = nums[i] + nums[left] + nums[right]
if sums == 0:
result = [nums[i], nums[left], nums[right]]
if result not in results:
results.append(result)
left += 1
right -= 1
elif sums < 0:
left += 1
else:
right -= 1
# if i > 0 and nums[i] == nums[i-1]:
# continue
# while left < right:
# sum = nums[i] + nums[left] + nums[right]
# if sum == 0:
# result = [nums[i],nums[left],nums[right]]
# results.append(result)
# left+=1
# right-=1
# #循环中nums[i]已确定,当再确定1个数时,另一个数也确定,左右端任一端出现重复均可跳过
# while nums[left] == nums[left-1] and left < right:
# left+=1
# while nums[right] == nums[right+1] and left < right:
# right-=1
# if sum<0:
# left+=1
# elif sum > 0:
# right-=1
return results
2. 四数之和
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
results = []
nums.sort()
length = len(nums)
for i in range(length-3):
for j in range(i+1, length-2):
left = j+1
right = length-1
while left < right:
sums = nums[i] + nums[j] + nums[left] + nums[right]
if sums == target:
result = [nums[i], nums[j], nums[left], nums[right]]
if result not in results:
results.append(result)
left += 1
right -= 1
elif sums > target:
right -= 1
else:
left += 1
return results