Tag: 组合

在字符串中生成字符组合并不完全有效,为什么?

我正在尝试生成字符串中所有字符的组合。 所以第一个参数是给定的字符串,第二个参数是字母数。 所以combinations(“ab”,2)应该给我aa, ab, ba, bb和combinations(“abc”,2)应该给我aa, ab, ac, ba, bb, bc, ca, cb, cc等。 在第一种情况下,我当前的代码给了我aa, ab, bb (所以它跳过ba )。 这是我的代码: public static void combinations(String s, int n) { combinations(s,””,n); } public static void combinations(String s, String prfx, int n) { if(n == 0) { System.out.println(prfx); } else { for(int i = 0; i < s.length(); […]

组合和置换算法(递归)

我正在从事Java任务,我绝对难过。 问题是: 使用Recursion编写一个函数来执行以下操作:您有X个不同的卡。 你只有Y信封。 Y小于或等于X.对于任何给定的X和Y值, 显示所有可能的方式,您可以在订单不重要时填写Y信封并且不允许重复。 hint: X! / (( XY)! * Y!) 显示所有可能的方法,您可以在订单重要时填写Y信封,并允许重复hint: X^Y 显示订单重要时可以填写Y信封的所有可能方式,并且不允许重复提示: X! / (X – Y)! X! / (X – Y)! 当订单不重要时,显示所有可能的填充Y信封的方法,并允许重复提示: (X + Y – 1)! / (Y! * (X – 1)!) (X + Y – 1)! / (Y! * (X – 1)!) 例如,在情况(1)下, if X = {J, Q, […]

递归创建apollonian垫片

Apollonian垫圈=它们是由圆的三元组产生的平面分形,其中每个圆与另外两个圆相切。 在他的垫圈图中,我们从两个外切圆开始,直径为D1和D2。 然后我们添加第三个圆,其直径为D1 + D2,两个原始圆在内部相切。 这是第一代圈子。 通过应用以下方案构造每个后续一代圆:对于任何前一代的彼此相切的任何三个圆A,BC,构造与A,B,C相切的新圆。 新圈子必须与目前构建的所有圈子不同。 当一代人完成时,即不能添加其他圈子,则可以开始构建下一代圈子。 还有一个额外的停止规则可防止产生无限小的圆圈。 当且仅当其直径的长度为最小minD(其为固定的正值)时,可以将圆圈添加到垫圈中。 输入由一行包含三个十进制数D1,D2和minD组成。 数字用空格分隔。 格式为通常的十进制格式(参见下面的示例),没有指数部分。 它认为1.0≤D1,D2≤1000.0,0.001≤minD≤D1+ D2。 输出由一个包含两个十进制数L1和L2的文本行组成。 L1表示垫圈中除圆圈之外的所有圆的面积之和。 L2表示垫圈中锡的所有圆的周长之和,除了最大圆圈。 两个输出值都舍入为6位十进制数字。 输出中必须始终存在十进制数字,即使其中一些数字为零。 Maximim输出值小于107。 输入 17.000000 40.000000 1.000000 产量 2439.258588 835.263228 2 对于给定的D1和D2,我像这样创建这两个圆圈(第一次迭代): double D1 = 17.00; double D2 = 40.00; double minD = 1.00; int i = 250, j = 350; comp.addCircle(i, j, (int) D2, randomColor); […]

Map <Object,List >的组合

我有一个HashMap<GC, List> ,其示例数据如下: key values gc1 – rr1 – rr2 – rr3 gc2 – rr4 – rr5 gc3 – rr6 我需要从不同的GC创建所有可能的RR组合,如: Combination1: rr1, rr4, rr6 Combination2: rr1, rr5, rr6 Combination3: rr2, rr4, rr6 Combination4: rr2, rr5, rr6 Combination5: rr3, rr4, rr6 Combination6: rr3, rr5, rr6 到目前为止,我已经尝试过,正如@Sanket Makani建议的那样,将我的HashMap<GC, List>转换为List<List> ,然后遍历所有元素,如: List<List> inputList = new ArrayList<List>(); for […]

如何在飞行中做组合

我有一个非常奇怪的问题,有一些限制,使其难以解决。 我有一个列表列表,我想要对这些列表中的所有项目进行组合。 每个项目都有一个名称和一个值。 这是一个例子: 主要清单: 清单01: Item 01:name:name01,value:value01 项目02:名称:name02,值:value02 清单02: 项目01:名称:name03,值:value03 清单03: 项目01:名称:name04,值:value04 项目02:名称:name05,值:value05 最终结果应如下所示: 一些清单: 项目01:name01:value01,name03:value03,name04:value04 项目02:name02:value02,name03:value03,name04:value04 项03:name03:value03,name03:value03,name04:value04 项04:name01:value01,name03:value03,name04:value05 项目05:name02:value02,name03:value03,name04:value05 项目06:name03:value03,name03:value03,name04:value05 新列表几乎包含像哈希映射一样的项目。 约束如下: 我无法收集到新的列表并将它们混合起来,因为这些列表很快就会变得非常大。 我正在使用某种类似观察者的API,所以我需要尽快让观察者了解结果,这样我才不会使用太多内存。 换句话说,该组合生成器可以用X个列表来提供,每个列表可以包含N个项目,并且我必须生成它们的组合而不使用太多的存储器。 我不希望一次使用超过5个列表,但我想使算法尽可能适应代码更改。 我正在解决java中的问题,但算法也应该在其他语言中同样工作,因为它很可能被翻译。 你有什么想法,建议吗? 提前致谢。 PS我不认为递归会很好。 我正在研究使用while循环和一些嵌套循环的想法,但是很难想象它应该如何工作。

列表的可能组合

我有一个对象的arraylist,我想创建所有可能的组合(根据一组简单的规则)。 存储在列表中的每个对象都包含一个squadNumber和一个字符串。 以下是我存储的典型列表的示例: 0: 1, A 1: 1, B 2: 2, A 3: 2, B 4: 3, C 5: 3, D 6: 4, C 7: 4, D 我想获得每个squadNumber只能出现一次的所有组合,例如:(1,A),(2,A),(3,C),(4,C)然后下一个组合将是(1的A),(2,A),(3,C),(4,d)。 我将如何在java中解决这个问题? 通常我会使用嵌套循环,但是它全部存储在一个列表中这一事实使我感到困惑。 谢谢,paintstripper

如何只实现抽象类的某些方法?

在我的具体类中,我需要实现(设置公共)抽象类的某些方法。 所以我无法扩展它,因为所有的抽象方法都是公开的。 我可以使用组合,并转发我需要的方法,但我显然需要实现抽象类。 所以,我想知道,在私有类中实现抽象类然后在父类中只转发内部类所需的方法是一种好方法吗? 例如: public class ConcreteClass{ private InnerClass inner = new InnerClass(); public String fwMethod() { return inner.method1(); } private class InnerClass extends AbstractClass { public String method1(){ …} public String method2(){ …} } } 有更好的方法吗?

获取给定字母表的所有4个字符的组合

让我们说alphabet = “abcd1234″我想要所有4位数的组合。 我不想通过所有排列并只选择那些长度为4个字符的字母,因为字母表可能很大。 编辑:这是我到目前为止 String alpha = “abcdefg”; for (int i = 0 ; i < alpha.length() ; i++) { for (int j = i ; j < alpha.length()-i ; j++) System.out.println(String.valueOf(alpha.charAt(i)) + String.valueOf(alpha.charAt(j)) ); } 不幸的是我只得到一个2个字符的单词。 我不能使用相同的循环结构打印4个字符的单词。

陷入组合问题

我和我的程序有问题。 我已经提取了一组数据,我想测试是否有特定数字的组合。 例如,我有一个int数组,1 2 3 4 5,我想知道是否有7个组合,它必须回答是有3 + 4。 我发现我需要使用组合配方。 所以我认为外环可能像5C1..5C2..5C3..etc,开始“取1”然后“取2”一次找出所有可能的组合。 问题是我坚持如何在实际代码中实现这一点。 我对数学并不是很了解,定义的循环结构确实会有所帮助。 非常感谢提前!

inheritance与组合

可能重复: 喜欢构成而不是inheritance? 我想知道,为什么(或者在哪种情况下)应该考虑inheritance而不是组合,当它有这么多的缺点时: 如果我们实现/覆盖调用超类方法的子类中的方法,则无法保证我们的超类的另一个版本(可能是某些库)不会破坏我们的代码 如果在超类中出现一个具有与子类方法相同的签名的新方法,但是具有不同的返回类型,则我们的类将不会编译。 因此,我无法想象,地球上我们如何依赖它。 超类作者可能希望提高性能,我们的客户端代码可能会崩溃。 所以我的问题是: 这些问题是如何解决的(例如在标准Java库中)? 何时使用inheritance和组合?