public List<List<Fieldmatrix>> permute(List<Fieldmatrix> fields, int start, List<Fieldmatrix> prefix) {
List<List<Fieldmatrix>> combinations = new ArrayList<>();
if (start >= fields.size()) {
combinations.add(prefix);
return combinations;
}
String field = fields.get(start).getFieldName();
if (fields.get(start).isMandatory() == false) {
combinations.addAll(combine(fields, start + 1, prefix));
}
List<Fieldmatrix> prefixWithField = new ArrayList<>(prefix);
prefixWithField.add(new Fieldmatrix (field, fields.get(start).isMandatory(), fields.get(start).getFieldtype(), new ArrayList<>()));
combinations.addAll(combine(fields, start + 1, prefixWithField));
return combinations;
}
结果是:
public class Fieldmatrix {
private String fieldName;
private boolean mandatory;
private Type fieldtype;
private List<Fieldmatrix> list = new ArrayList<>();
public Fieldmatrix(String fieldName, boolean mandatory, Type fieldtype, List<Fieldmatrix> list){
this.fieldName = fieldName;
this.mandatory = mandatory;
this.fieldtype = fieldtype;
this.list = list;
}
//Getters and Setters
假设顺序不重要,您可以使用一种方法来生成可选参数(即在您的情况下为假参数)的所有组合,如下所示:
假设您有3个可选参数和2个强制参数。所以您将有3^2=9个组合。
现在,您所要做的就是迭代9次,生成所有可能的组合。
for(i=0;i<9;i++){
for(j=0;j<options.length;j++){
if(j'th bit is set in 'i')
print(options[j]);
}
}
假设我有一个项目列表,每个项目都由一个简单的结构定义 毛皮类的选择:长的,短的,卷曲的 如果列表中包含了这3个类别的所有排列,那么最终结果将是 第一组: 动物 [猫狗鼠马] 眼睛颜色[蓝黄绿红橙] 皮毛 [长短卷曲] null 让我们将此列表称为输入(A) 将这些项目分组后,我们可以得到:(可能有其他可能性)。分组标准将是拥有尽可能少的输出组。 第一组: 动物
问题内容: 我正在尝试编写一段代码来执行以下操作: 取数字0到9,并给该数字分配一个或多个字母。例如: 当我有0123这样的代码时,对它进行编码很容易。显然,它将组成代码NLTD。当引入数字5,6或8时,情况会有所不同。051之类的数字可能会导致多种可能性: NVL和NFL 显而易见,较长的数字甚至包括5、6或8这样的数字,甚至会变得“更糟”。 由于对数学非常不好,我还无法提出一个像样的解决方案,
问题是关于从16:43到23:34的视频中的合并排序http://youtu.be/M814OagXWTI?t=16m43s 在退出左/右排序合并递归后,我不清楚我们是如何合并回这些子数组的。让我们从最底部开始,当我们的元素被分成两个子数组时,一个左子数组称为B,一个右子数组称为C。在16:43左右,我们跳转到合并函数,对数组B和C进行排序,这两个数组只有8和3。合并排序函数(下面的代码)基本上通
map() 以链式调用的方式来简化 match 语句。然而,在返回类型是 Option<T> 的函数中使用 map() 会导致出现嵌套形式 Option<Option<T>>。多层链式调用也会变得混乱。所以有必要引入 and_them(),就像某些熟知语言中的 flatmap。 and_then() 使用包裹的值(wrapped value)调用其函数输入并返回结果。 如果 Option 是 No
match 是处理 Option 的一个有效方法。但是你最终会发现很多用例都相当繁琐,特别是操作只有一个有效输入的情况。在这些情况下,可以使用 组合算子(combinator)以模块化方式来管理控制流。 Option 有一个内置方法 map(),这个组合算子可用于简单映射Some -> Some 和 None -> None 的情况。多个不同的 map() 调用可以更灵活地链式连接在一起。 在下面
问题内容: 我有ID为的商品。现在我有如下数据。每行都有一个offerId。由数组中的组合组成。是那个的价值 现在,我必须选择所有给我提供最佳ID组合(即最大总折扣)的offerId。 例如,在上述情况下:可能的结果可能是: [o2,o4,o5]最大折扣为。 注意。结果offerId应该不会重复ID。id的示例为[1,3,4],[5],[6]都是不同的。 其他组合可以是: 其id为[1],[3,5