gpt4 book ai didi

java - 列表列表中的堆算法实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:55 28 4
gpt4 key购买 nike

我正在使用 Heap 的算法创建一个列表列表,其中包含所述列表的每个排列。每个排列都是它自己的列表。当我在算法中打印它时它可以正常工作,但是当我尝试将它添加到我的列表列表并且它们都是相同的数组(4、1、2、3)时它不能正常工作。我注释掉了我测试过的打印品,以确保它能正常工作。

我当前的代码:

public static ArrayList<int[]> lists = new ArrayList<>();

public static void main(String[] args) {
int[] list = {1,2,3,4};
heapsAlgorithm(4,list);
for(int i = 1; i <= lists.size(); i++) {
System.out.println("List " + i + ": " + Arrays.toString(lists.get(i-1)));
}
}

public static void heapsAlgorithm(int n, int[] list) {
if (n == 1) {
lists.add(list);
//System.out.println(Arrays.toString(list));
}
else {
for(int i = 0; i < n; i++) {
heapsAlgorithm(n - 1, list);
if ( n % 2 == 0) {
int swap = list[i];
list[i] = list[n-1];
list[n-1] = swap;
}
else {
int swap = list[0];
list[0] = list[n-1];
list[n-1] = swap;
}
}
}
}

工作:

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

不正确的输出:

List 1: [4, 1, 2, 3]
List 2: [4, 1, 2, 3]
List 3: [4, 1, 2, 3]
List 4: [4, 1, 2, 3]
List 5: [4, 1, 2, 3]
List 6: [4, 1, 2, 3]
List 7: [4, 1, 2, 3]
List 8: [4, 1, 2, 3]
List 9: [4, 1, 2, 3]
List 10: [4, 1, 2, 3]
List 11: [4, 1, 2, 3]
List 12: [4, 1, 2, 3]
List 13: [4, 1, 2, 3]
List 14: [4, 1, 2, 3]
List 15: [4, 1, 2, 3]
List 16: [4, 1, 2, 3]
List 17: [4, 1, 2, 3]
List 18: [4, 1, 2, 3]
List 19: [4, 1, 2, 3]
List 20: [4, 1, 2, 3]
List 21: [4, 1, 2, 3]
List 22: [4, 1, 2, 3]
List 23: [4, 1, 2, 3]
List 24: [4, 1, 2, 3]

我假设我错误地使用了我的 ArrayList,但我不确定在哪里。有什么建议吗?

最佳答案

您需要复制您的 int 数组。

您有一个数组的可变实例和您假设要保留排列的数组列表。基本上,发生了什么:

  1. 你做排列。
  2. 您向 ArrayList 添加排列。
  3. 您对同一对象进行另一个排列。
  4. 您将已经在此列表中的对象添加到 ArrayList。

最后,您有 ArrayList,其中添加了 20 次相同的 int 数组。

关于java - 列表列表中的堆算法实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com