我正在尝试编写一个函数,该函数将生成数组的所有唯一组合,以获取不超过一定数量的值。
该函数有两个参数,一个参数是数组的长度,另一个参数是整数的最大大小。
F(4, 3)
是一个函数,它将在三个整数数组中生成小于或等于4的正整数的所有可能唯一组合。 F(10, 100)
将在100整数数组中生成所有小于或等于10的正整数的所有可能唯一组合。
F(4, 3)
的结果将像这样开始:
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 1), (1, 2, 2) ... (4, 4, 4)
F(10, 10)
会像这样:
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), (1, 1, 1, 1, 1, 1, 1, 1, 1, 2), ...
(10, 10, 10, 10, 10, 10, 10, 10, 10, 10)
答案 0 :(得分:1)
P=Max**Len
有F(Max, Len)
个数组,范围0..P-1
中的数字和数组之间存在双射。
因此,您可以遍历该范围内的所有数字,并以M-ric数字系统表示循环计数器(第一个示例中的计数器4(dec)对应于(1、2、1))
另一种方法-使用数组作为多位计数器(例如带有旋转圆柱体的旧电表显示)。当某个数字变为“最大”并应递增时,它将重置为1,而下一个数字将递增(在您的示例中为{(1, 1, 4) => (1, 2, 1)
)。