我想为 Google 表格创建一个函数,允许我像图片一样列出 A 列中数字的所有可能组合,但不仅仅是 4 个值,我可以在 A 列中有超过 20 个。
非常感谢任何帮助!
注意:我测试了一些解决方案,似乎更接近的是here,但是给我这个:“错误:您无权调用setValues(第35行)。” (原来的错误是葡萄牙语)。
note 2.: Sum of all number combinations excluding repetition Excel 的建议给我公式错误,只显示 4 个值。
组合的数量,或者更准确地说,唯一的 n 元组,随着值数量的增加而快速增长。使用 20 个值,您将获得大约一百万个元组,这些元组在矩阵中总共包含大约 2000 万个元素。这太多了,无法在电子表格中轻松处理。
另一方面,如果有 15 个值,您只需要生成大约 30,000 个元组和大约 650,000 个元素,这更易于管理。为此,首先计算笛卡尔积,然后对结果进行过滤、求和和格式化,如下所示:
=let(
values, torow(A2:A, 1),
zeros, map(values, lambda(_, 0)),
table, { zeros; values },
blank, iferror(1/0),
first_, lambda(array, tocol(choosecols(array, 1), true)),
rest_, lambda(n, choosecols(table, sequence(1, columns(table) - n, n + 1))),
wrap_, lambda(array, wrapCount, wraprows(tocol(array, true), wrapCount)),
cartesian_, lambda(a, b, wrap_(
byrow(a, lambda(row,
reduce(blank, sequence(rows(b)), lambda(acc, i,
{ acc, row, chooserows(b, i) }
) )
) ),
columns(a) + columns(b)
) ),
iterate_, lambda(
self, a, b, if(iserror(b), a,
self(self, cartesian_(a, first_(b)), rest_(columns(a) + 1))
)
),
cartesian, iterate_(iterate_, first_(table), rest_(1)),
sums, byrow(cartesian, lambda(row, sum(row))),
expressions, byrow(cartesian, lambda(row, join(" + ", filter(row, row)))),
sort(unique(filter({ expressions, sums }, sums)))
)
问题并不清楚单个值是否应该可重复,如果是,每个值最多应该重复多少次。如果您想最多重复每个值两次,请使用像
1, 1, 2, 2, 3, 3, 4, 4
. 这样的值列表
以下是具有 4 个值的结果示例:
价值观 | 说明 | 总和 |
---|---|---|
1 | 1 | 1 |
2 | 1 + 2 | 3 |
3 | 1 + 2 + 3 | 6 |
4 | 1 + 2 + 3 + 4 | 10 |
1 + 2 + 4 | 7 | |
1 + 3 | 4 | |
1 + 3 + 4 | 8 | |
1 + 4 | 5 | |
2 | 2 | |
2 + 3 | 5 | |
2 + 3 + 4 | 9 | |
2 + 4 | 6 | |
3 | 3 | |
3 + 4 | 7 | |
4 | 4 |