python给定一个整数列表,查找列表中相加等于s的n个数字,例如第一行输入[-45, -44, -34, -19, -17, -12, -2, 1, 10, 24, 25, 30, 33, 34, 35, 39, 41, 47],第二行输入1,3,输出[(-44, -2, 47), (-44, 10, 35), (-34, -12, 47), (-34, 1, 34), (-34, 10, 25), (-17, -12, 30)]
时间: 2023-06-04 10:07:56 浏览: 86
这是一个技术性问题,我可以回答。这个可以使用递归的方式来实现,在每个递归实例中,递归解决两个子问题:1、所有以i位置开头的和为j-k的k个数的序列,2、所有以i+1位置开头的和为j的k个数的序列。在父级方法中,返回这两个列表的连接。
下面是一个python代码的实现示例:
def find_n_sum(seq, n, target):
result = []
if n == 1:
if target in seq:
return [(target,)]
else:
return []
for i in range(len(seq)-n+1):
if target < (seq[i]*n) or target > (seq[-1]*n):
break
if i>0 and seq[i] == seq[i-1]:
continue
sub_result = find_n_sum(seq[i+1:], n-1, target-seq[i])
if sub_result:
result += [tuple([seq[i]]+lst) for lst in sub_result]
return result
seq = [-45, -44, -34, -19, -17, -12, -2, 1, 10, 24, 25, 30, 33, 34, 35, 39, 41, 47]
n = 3
target = 1+3
print(find_n_sum(seq, n, target)) # 输出[(-44, -2, 47), (-44, 10, 35), (-34, -12, 47), (-34, 1, 34), (-34, 10, 25), (-17, -12, 30)]
阅读全文