Отказ от ответственности:
- Это моя оригинальная работа. Ни одна часть решения нигде не была скопирована.
- Мое решение отлично работает для 3 элементов. Тем не менее, это должно быть улучшено для работы с массивами других размеров. Несмотря на это, я публикую его, чтобы OP или кто-либо другой могли расширить это решение для работы с массивом любого размера.
- Этот вопрос близок к блоку питания, за исключением того факта, что блок питания не может иметь дублирующихся элементов. Если это исключение будет исключено из этого вопроса, будет доступно множество решений, например: 1 , 2 , 3 et c.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = { 15, 20, 12 };
System.out.println(Arrays.deepToString(subsets(arr)));
}
public static int[][] subsets(int input[]) {
int[][] subarrs = new int[(int) Math.pow(2, input.length) - 1][input.length];
int[] indices = { 0 };
subsetsHelper(input, subarrs, 0, 0, 0, indices);
return subarrs;
}
private static void subsetsHelper(int input[], int[][] subarrs, int index, int i, int j, int[] indices) {
if (i == input.length) {
subarrs[index] = input;
return;
}
int[] subarr = new int[indices.length];
for (int x = 0; x < subarr.length; x++) {
subarr[x] = input[indices[x]];
}
subarrs[index] = subarr;
if (j == input.length - 1) {
subsetsHelper(input, subarrs, index + 1, i + 1, i + 1, new int[] { i + 1 });
} else {
subsetsHelper(input, subarrs, index + 1, i, j + 1, new int[] { i, j + 1 });
}
}
}
Выход:
[[15], [15, 20], [15, 12], [20], [20, 12], [12], [15, 20, 12]]