defthreeSum(nums, target): nums.sort() # 先对数组进行排序 results = [] # 存储结果的列表 for i inrange(len(nums)-2): # 遍历数组中的每个元素 if i > 0and nums[i] == nums[i-1]: # 避免重复的结果 continue l, r = i+1, len(nums)-1# 两个指针,从数组的两端向中间移动 while l < r: s = nums[i] + nums[l] + nums[r] # 计算三个数的和 if s == target: # 如果和等于目标值,就找到了一个结果 results.append([nums[i], 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 s < target: # 如果和小于目标值,左指针向右移动 l += 1 else: # 如果和大于目标值,右指针向左移动 r -= 1 return results # 返回所有的结果
ef fourSum(nums, target): deffindNsum(l, r, target, N, result, results): # 提前终止条件 if r-l+1 < N or N < 2or target < nums[l]*N or target > nums[r]*N: return # 两数之和问题 if N == 2: while l < r: s = nums[l] + nums[r] if s == target: results.append(result + [nums[l], nums[r]]) l += 1 while l < r and nums[l] == nums[l-1]: # 避免重复的结果 l += 1 elif s < target: l += 1 else: r -= 1 else: # 归约为N-1数之和问题 for i inrange(l, r+1): if i == l or (i > l and nums[i-1] != nums[i]): findNsum(i+1, r, target-nums[i], N-1, result+[nums[i]], results)