gpt4 book ai didi

Java函数计算无重复排列

转载 作者:行者123 更新时间:2023-12-01 06:18:29 24 4
gpt4 key购买 nike

我有一个 ArrayList,我想使用单个函数(内置或非内置)查找给定大小的所有组合,而不在其中重复。例如:

ArrayList<Integer> numbers = Array.asList(96, 32, 65, 21);
getCombinationsWithoutRepeats(numbers, 2);

输出:

>>> [[96, 32], [96, 65], [96, 21], [32, 65], [32, 21], [65, 21]]

我如何创建这个函数或者是否有一个内置函数可以做到这一点?

最佳答案

这是一个使用回溯的示例解决方案。它将生成所有可能的大小为 K 的排列并将它们存储在 lists 字段中。

List<List<Integer>> lists = new ArrayList<List<Integer>>();

void permutate(int[] arr, int k) {
internalPermutate(arr, k, 0, 0);
}

void internalPermutate(int[] arr, int k, int step, int index) {
if (step == k) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < k; i++) {
list.add(arr[i]);
}
lists.add(list);
}

for (int i = step + index; i < arr.length; i++) {
swap(arr, step, i);
internalPermutate(arr, k, step + 1, i);
swap(arr, step, i);
}
}

private void swap(int[] arr, int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}

public static void main(String[] args) {
new SomeClass().permutate(new int[] { 1, 2, 3, 4 }, 2);
System.out.println(lists);
}

此解决方案不处理数组中具有相同元素的情况,但您可以在排列之前排除它们。

关于Java函数计算无重复排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259889/

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