这题没有用到特别高的技巧,只是在3sum的基础上稍加变换。得分也只是在中间偏下。看到前面有一波密集的,应该有简单的算法的。代码如下:
class Solution(object):
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
nums.sort()
if len(nums) < 4:
return []
listofall = []
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + 3 * nums[j] <= target:
r = len(nums) - 1
l = j + 1
while l < r:
if nums[i] + nums[j] + nums[l] + nums[r] > target:
r = r - 1
elif nums[i] + nums[j] + nums[l] + nums[r] < target:
l = l + 1
else:
if [nums[i], nums[j], nums[l], nums[r]] not in listofall:
listofall.append([nums[i], nums[j], nums[l], nums[r]])
r = r - 1
l = l + 1
return listofall