【发布时间】:2014-11-22 22:43:16
【问题描述】:
假设我有 k 个相同的项目,我想将它们分成 n 个组。如何遍历每一个可能的组合?
到目前为止,我已经在板上写了一些数字。假设 k = n = 4,那么系统地列出它们的方法是找到所有 4 位数字(其中 0 可以是一个数字),它们的数字加起来为 k。按升序排列:
0 0 0 4
0 0 1 3
0 0 2 2
0 0 3 1
0 0 4 0
0 1 0 3
0 1 1 2
0 1 2 1
0 1 3 0
0 2 0 2
0 2 1 1
0 2 2 0
0 3 0 1
0 3 1 0
0 4 0 0
1 0 0 3
...
我希望避免首先生成所有组合而不考虑总和,然后删除所有加起来不等于 k 的组合。因为这会生成 k^n 组合,并且可能需要很长时间。无论是 for 还是递归都没有关系,但它必须相当有效。
【问题讨论】:
-
您可以使用 for 循环或递归,for 是一个常数 n,而递归您必须通过递归来计算时间复杂度
-
伪代码会很好:)
-
那么到目前为止你尝试过什么?我不是来为你做你的工作的。
-
在编写两个嵌套递归函数定义后卡住了。如果我知道该怎么做就不会问问题了...
-
能否请您也发布您的尝试,它必须是递归的吗?可以在for中吗?还是您在寻找最高效的?