我有一组Card
个实例。
Card[] allCards;
我应该在以下条件下获得这些卡的所有可能组合:
出于大学目的,我不应该使用任何能够更轻松地完成这项工作的精美图书馆。
我已经用成对完成了,当然,但考虑到没有限制,我通常会做的算法不起作用。
这就是他们在这里要求的python:Find all possible combinations
有什么想法吗?我不想要代码或任何东西 - 我只是迷失了算法/想法。
我的问题(更详细)
我可以通过制作两个循环(一个在另一个循环中)来制作对。我可以通过三个循环(一个在另一个循环中)来制作三元组。
但我不知道如何解决这个具体问题,因为:
我可以找到一些组合,但不是动态的。
答案 0 :(得分:1)
纸和铅笔练习
让我们暂时退出Java语法。举一个5张牌的例子,比如Ace到10颗钻石。现在列出所有可能的对。 (提示:其中有10个)
现在使用您的配对列表,列出每个可能的三元组。
现在使用三元组列表,列出每个可能的4组合。
现在让我们编码:
由于您在编译时不知道组合的最大长度,因此使用循环将无法解决问题。另一方面,这个问题有助于递归。让我们首先假设我们有一个函数Card[][] getCombinations(Card[] cards)
,它返回一个卡阵列数组。所以如果我们打电话
Card[] cards = new Card[15];
// initialize individual Card objects
Card[][] combinations = getCombinations(cards);
combinations[i]
包含生成的其中一个组合。
现在,为了简单起见,我们假设getCombinations()
只返回对。你如何使用这些对来创建所有可能的三元组?