java[001,002,003]如何效率最高的穷举出两位以上的所有组合方式?
java 现有list1[11,33,22]
效率最高穷举出两位以上任意相连的方式,如:
[11,33]、[11,22]、[11,33,22]、[11,22,33]、[33,22]、[33,11]、[33,11,22]、[33,22,11]、
[22,11]、[22,33]、[22,33,11]、[22,11,33]、
回答:
import java.util.*;public class Test {
// 使用递归实现
public static void main(String[] args) {
int[] nums = { 11, 33, 22 };
for (int i = 2; i <= nums.length; i++) {
combine(nums, new int[i], 0, 0);
}
}
public static void combine(int[] nums, int[] temp, int start, int index) {
if (index == temp.length) {
permutation(temp, 0, temp.length - 1);
return;
}
for (int i = start; i < nums.length; i++) {
temp[index] = nums[i];
combine(nums, temp, i + 1, index + 1);
}
}
public static void permutation(int[] arr, int start, int end) {
if (start == end) {
System.out.println(Arrays.toString(arr));
} else {
for (int i = start; i <= end; i++) {
swap(arr, start, i);
permutation(arr, start + 1, end);
swap(arr, start, i);
}
}
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
回答:
跑一下吧:
import java.util.*;public class Main {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(11,33,22);
List<List<Integer>> res = enumerate(list1);
System.out.println(res);
}
private static List<List<Integer>> enumerate(List<Integer> list) {
List<List<Integer>> res = new ArrayList<>();
if (list.size() <= 1) {
return res;
}
for (int i = 0; i < list.size() - 1; i++) {
Integer num1 = list.get(i);
for (int j = i + 1; j < list.size(); j++) {
Integer num2 = list.get(j);
List<Integer> subList = list.subList(i, j + 1);
res.add(subList);
List<List<Integer>> subRes = enumerate(subList);
for (List<Integer> sub : subRes) {
res.add(sub);
}
}
}
return res;
}
}
以上是 java[001,002,003]如何效率最高的穷举出两位以上的所有组合方式? 的全部内容, 来源链接: utcz.com/p/945203.html