进行搜索就可以。思路与前面类似题一样。
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
def findNSum(l, r, nums, target, N, result, results):
'''
:param l: 数组左部
:param r: 右部
:param nums: 原始数组
:param target: 目标和值
:param N: 需要N数相加
:param result: 暂时结果
:param results: 最总结果
:return:
'''
if r - l + 1 < N or N < 2 or target < nums[l] * N and target < nums[r] * N:
return
if N == 2:
while l < r:
sum = nums[r] + nums[l]
if sum == target:
results.append(result + [nums[l], nums[r]])
l += 1
while l < r and nums[l] == nums[l - 1]:
l += 1
elif sum > target:
r -= 1
else:
l += 1
else:
for i in range(l , r + 1):
if i > l and nums[i] == nums[i - 1]:
continue
findNSum(i + 1, r, nums, target - nums[i], N-1,result=result + [nums[i]], results=results)
if len(nums) < 4:
return []
if len(nums) == 4:
nums.sort()
return [nums] if sum(nums) == target else []
nums.sort()
results = []
findNSum(0, len(nums) -1, nums, target, 4, [], results=results)
return results