Java算法将所有组合列表划分为列表



如何将数组的内容分为两个水桶并获取所有组合?

例如:阵列[A,B,C]

Bucket 1      Bucket 2
-             ABC
A             BC
BC            A
AB            C
C             AB
AC            B
B             AC
ABC           -

置换次数遵循公式:2^n,其中n是阵列的长度。

这是我到目前为止的代码。但是,它并没有完成所有可能的组合:

  for(int i=0; i<=testPortfolioArray.length; i++) {
      Object[] bucket1 = Arrays.copyOfRange(testPortfolioArray, 0, i);
      Object[] bucket2 = Arrays.copyOfRange(testPortfolioArray, i, testPortfolio.size());
      if(i>0 && i<testPortfolioArray.length) {
          bucket1 = Arrays.copyOfRange(testPortfolioArray, i, testPortfolio.size());
          bucket2 = Arrays.copyOfRange(testPortfolioArray, 0, i);
      }
  }

首先考虑要表示解决方案的数据结构:对于对象的一个分区,每个对象都在存储桶1中或桶2中,因此可以使用一个位来描述这一点。然后,如果您有n个对象要分开,则可以用一串n位表示一个分区。

使用该数据结构,所有部门的集合均由所有n个二进制数字的列表组成,如果i-thit为0,则该项目I位于桶1中,如果I-th,则在桶2中位是1。

这会给您您的追求吗?

最新更新