枚举Java中两个向量元素的所有可能交换

时间:2018-05-05 23:29:58

标签: java vector enumerate

假设我们有一个整数数组如下:

int[] sol = new int[] {3, 5, 1, 2, 4};

我想枚举在选择数组的2个任意元素并交换它们时可以获得的所有可能的数组(即如果我们将数字3与数字2交换,我们得到{2, 5, 1, 3, 4})。在这种情况下,有2个元素的10个可能的交换。

如何用Java显示所有可能的枚举?

1 个答案:

答案 0 :(得分:0)

您需要做的第一件事是弄清楚可能存在多少种不同的可能组合。在这种情况下,由于您选择了2个数字: 3比5 3比1 3比2 3 for 4

5 for 3 5比1 5比2 5 for 4

等等等等。由于每个数字有4个其他数字可以配对,我们可以通过以下等式计算出总数:numberOfElementsInVector * 4。在这种情况下,我们得到20.这意味着我们只需要循环20次。我们还需要跟踪我们已经收集的结果。为此,我们将字符串存储在ArrayList中。现在我们要做的是以下双循环:

ArrayList<String> results = new ArrayList<>();
for(int i = 0; i < sol.length; i++){
    for(int j = 0; j < sol.length; j++){
        String result = sol[i] + "," + sol[j] + "";
        if(!results.contains(result) && sol[i] != sol[j]){
           results.add(result);
        }
    }
}
System.out.printLn(results.toString());

此代码将系统地遍历任何长度的数组,并为您提供所有2个数字组合。