【问题标题】:summing multiple sets对多个集合求和
【发布时间】:2011-01-06 20:44:42
【问题描述】:

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

 [ 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},取新集合的笛卡尔积,然后在结果中添加元素:en.wikipedia.org/wiki/Cartesian_product
  • 问题中已经描述了“算法”。它真的符合“算法”标签吗?

标签: c algorithm math


【解决方案1】:

对于第一个列表中的每个数字,生成以该数字开头的所有总和,并通过对除第一个列表之外的所有列表应用相同的方法递归生成所有总和。当您没有剩余列表时,这是基本情况。

伪代码:

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

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多