总计多组

时间:2011-01-06 20:44:42

标签: c algorithm math

如果我有几组数字(只是一个2D数组,其中每一行都是一组):

 [ 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

1 个答案:

答案 0 :(得分:4)

对于第一个列表中的每个数字,生成以该数字开头的所有总和,并通过将相同的方法应用于除第一个列表之外的所有数据来递归生成所有总和。如果没有剩下的列表,那就是基本情况。

的伪代码:

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