[leetcode]18. 4Sum

本文介绍了一种解决四数之和问题的有效算法。通过排序和递归的方式,该算法可以找出数组中所有可能的四个元素组合,这些组合的和等于指定的目标值。递归过程将问题分解为更小的问题,利用双指针技术来减少搜索范围。

求一个数组中任意四个数的和为target的所有组合

思路:求n个数的和为target,转变为求n-1个书的和为target-num

 1 class Solution(object):
 2     def fourSum(self, nums, target):
 3         nums.sort()
 4         ress = []
 5         self.find(nums,target,4,[],ress)
 6         return ress
 7     
 8     def find(self,nums,target,n,res,ress):
 9         if n == 2:
10             l,r = 0,len(nums)-1
11             while l<r:
12                 if nums[l]+nums[r]==target:
13                     ress.append(res+[nums[l],nums[r]])
14                     l += 1
15                     r -= 1
16                     while l<r and nums[l] == nums[l-1]:
17                         l += 1
18                     while l<r and nums[r] == nums[r+1]:
19                         r -= 1
20                 elif nums[l]+nums[r] <target:
21                     l += 1
22                 else:
23                     r -= 1
24         else:
25             for i in range(len(nums)-n+1):
26                 if target < nums[i]*n or target > nums[-1]*n:
27                     break
28                 if not i or nums[i]!=nums[i-1]:
29                     self.find(nums[i+1:],target-nums[i],n-1,res+[nums[i]],ress)
30         return 
31             
32             
33             
34             

 

转载于:https://www.cnblogs.com/fcyworld/p/6551276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值