|
|
1
2
解决方案可以递归地构建。将输入看作一个数字列表,如[2,2,2,2,3,3,3]。将列表分成前缀(例如[2,2])和相应的后缀(在本例中为[2,2,3,3])。现在,将前缀中的条目进行多个(在本例中我们得到4个),并递归地解决后缀的相同问题。将值从多重性插入到后缀的每个解的开头,我们就得到了原始问题的答案。
在下面的Python代码中,递归逻辑在函数中定义
输出为
|
|
|
2
2
如果顺序很重要(即2*4*2和2*2*4不一样),你必须列出它们(即“生成”),那么你应该递归地全部完成。在斯卡拉:
你可能不了解Scala,下面是这三个案例的工作原理。第一种情况:列表至少还有两个元素。选取第一个元素并将其添加到所有可能的后续组合中。那么, 如果 您可以合并第一个和第二个元素,然后查找以该元素开头的列表的所有组合。第二种情况:只有一个元素的平凡列表;将其作为列表中的唯一元素返回。第三种情况:退化输入(没有给定值);返回空列表。
(在斯卡拉,
这就是它的作用:
编辑:如果你只是想数数,你可以使用不同类型的重复。让
所以你从最后一项开始——只有一种可能性——然后按照这个公式的顺序反向工作。(如果这正是您所追求的,我将编写实现它的代码,但希望算法足够清晰。) |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |