如果我有几组数字(只是一个二维数组,其中每一行都是一组):
[ 1, 3, -1, -1]
[ 2, 4, -1, -1]
[ 7, 8, 9, 10]
创建和列表(忽略 -1)的算法是什么?上面的结果是:
1+2+7,
1+2+8,
1+2+9,
1+2+10,
1+4+7,
1+4+8,
1+4+9,
1+4+10,
3+2+7,
3+2+8,
3+2+9,
3+2+10,
3+4+7,
3+4+8,
3+4+9,
3+4+10
最佳答案
对于第一个列表中的每个数字,生成以该数字开始的所有总和,并通过对除第一个列表以外的所有列表应用相同的方法递归生成所有总和。当您没有剩余列表时,这是基本情况。
伪代码:
function find_sums(lists):
if lists is empty:
return [""]
sums = []
for n in lists[0]:
if n != -1:
for sum in find_sums(lists from index 1 onwards):
sums.append(n + "+" + sum)
return sums
这叫做 Cartesian product .
关于c - 对多组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4619652/