【问题标题】:How to get all possible combinations of elements of one (int) array?如何获得一个(int)数组的元素的所有可能组合?
【发布时间】:2020-05-20 18:46:12
【问题描述】:

我一直在编写代码来获取数组中元素的所有组合,但我不知道该怎么做。大家能给我一些建议吗?

这就是我想要做的......

            int[] num = {1, 2, 3, 4, 5};
            int n = num.length;
            int length = (n * (n - 1)) / 2;
            int[] list = new int[length];

            for (int j = 0; j < n - 1; j++) {
                for (int p = 4;p < n; p--) {
                    for (int i = 0; (I < length); i++) {
                        list[i] = Math.abs(num[j] - num[j + p]);
                    }
                    p++;        
                }
            }

我的结果列表看起来像这样..

list = {1, 2, 3, 4, 1, 2, 3, 1, 2, 1};

提前谢谢你。

编辑:我真的很抱歉我没有清楚地发布我的问题。我试图做的是得到从数组中减去每个值的绝对值。 例如)1-2、1-3、1-4、1-5、2-3、2-4、2-5、3-4、3-5、4,5

for (int v : list) {
    System.out.println(v);
}

输出: 1 2 3 4 1 2 ...

【问题讨论】:

  • 这能回答你的问题吗? All possible combinations of an array
  • @PM77-1,我不这么认为。在这里,1, 3 不是一个组合。
  • @HarshalParekh :我猜 OP 使用他自己的术语。
  • @PM77-1,我同意,用词不当

标签: java arrays


【解决方案1】:

按如下方式进行:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] num = { 1, 2, 3, 4, 5 };
        int n = num.length;
        int length = (n * (n - 1)) / 2;
        int[] list = new int[length];

        // Index counter for list[]
        int c = 0;

        for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j < i; j++) {
                list[c++] = num[j];
            }
        }

        // Display
        System.out.println(Arrays.toString(list));
    }
}

输出:

[1, 2, 3, 4, 1, 2, 3, 1, 2, 1]

【讨论】:

  • 谢谢!我会再试一次,但我试图获得从数组中减去值的绝对值。抱歉,我没有明确说明我想要什么。
  • 最后,我根据您的回答解决了我的问题。谢谢!
【解决方案2】:

对于任何值n,以下应该有效。关键是将内循环的终止点建立在外循环的终止点上。

System.out.println(string);
int n = 5;
int[] num = {1, 2, 3, 4, 5};
int length = (n * (n - 1)) / 2;

int m = 0;
int[] list = new int[length];
for (int i = 1; i<n ; i++) {
    for (int k = 1; k <= n-i; k++) {
        list[m++] = num[k-1];
    }
}
System.out.println(Arrays.toString(list));

打印

1 2 3 4 1 2 3 1 2 1 

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2013-02-12
    相关资源
    最近更新 更多