如何根据此标准找到所有可能的组合?

Vol*_*ort 5 java recursion combinations

我有一组Card实例.

Card[] allCards;
Run Code Online (Sandbox Code Playgroud)

我应该在以下条件下获得这些卡的所有可能组合:

  • 所有组合必须至少有3张牌.
  • 组合没有卡限制(因此如果总共有15张牌,你知道可以有15张卡的组合,其他的可以是13张,等等).

出于大学目的,我不应该使用任何能够更轻松地完成这项工作的花哨库.

我确实已经完成了它,但考虑到没有限制,我通常会做的算法不起作用.

这几乎是他们在这里要求的python:找到所有可能的组合

有任何想法吗?我不想要代码或任何东西 - 我只是迷失了算法/想法.

我的问题(更详细)

我可以通过制作两个循环(一个在另一个循环中)来制作对.我可以通过三个循环(一个在另一个在另一个内)来制作三元组.

但我不知道如何解决这个具体问题,因为:

  • 如果阵列有15张卡怎么办?我不能写15个循环......
  • 然后当然我需要下降到14,13,12个循环...(因为所有组合都不是每个15个元素,当使用这个15个元素时,可以有14,13,12个元素的组合 - 阵列)

我可以找到一些组合,但不是动态的.

Cod*_*ice 1

纸笔练习:

让我们先暂时离开 Java 语法。以 5 张牌为例,从 A 到方块 10。现在列出所有可能的配对。(提示:共有 10 个)

现在使用您的对列表,列出每个可能的三元组。

现在使用三元组列表,列出 4 的每种可能的组合。

现在我们来编码:

由于您在编译时不知道组合的最大长度,因此使用循环无法解决问题。另一方面,这个问题本身就需要递归。首先,假设我们有一个Card[][] getCombinations(Card[] cards)返回卡片数组数组的函数。所以如果我们打电话

Card[] cards = new Card[15];
// initialize individual Card objects
Card[][] combinations = getCombinations(cards);
Run Code Online (Sandbox Code Playgroud)

combinations[i]包含生成的组合之一。

现在,为了让事情变得简单,我们假设getCombinations()只返回对。如何使用这些对来创建所有可能的三元组?