- 帖子
- 37
- 精华
- 0
- 积分
- 476
- 阅读权限
- 30
- 注册时间
- 2018-3-31
- 最后登录
- 2019-10-26
|
本帖最后由 风扇很响 于 2018-4-12 22:58 编辑
你这个为什么要这么麻烦呢,直接用itertools加上一个去重处理不就完了吗。。。"选择困难的农药召唤师"那题里面提到了啊。。。
#给定一个包含 n 个整数的数组 S,是否存在属于 S 的三个元素 a,b,c
#使得 a + b + c = 0 ?找出所有不重复的三个元素组合使三个数的和为零。
#注意:结果不能包括重复的三个数的组合。
#题意不明,是说三个数的组合不能重复,即[1,2,-3]和[2,1,-3]视为同一种组合
#还是三个数之间不能重复,即不能出现[1,1,-2]这样的组合?
#先按第一种做
import itertools
def Sum_N_S(nums, N, S):
#N是相加的数的个数,S是这N个数之和
t = []
for item in itertools.combinations(nums, N):
if sum(item) == S:
if item not in t:
t.append(item)
return t
nums = [-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
print(Sum_N_S(nums, 3, 0))
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============== RESTART: D:\Python36\code\crossin\数组三个元素相加为0.py ==============
[(-4, -2, 6), (-4, 0, 4), (-4, 1, 3), (-4, 2, 2), (-2, -2, 4), (-2, 0, 2)]
>>> |
|