Лучший способ получить набор мощности массива?

Как лучше всего получить набор мощности массива? Например, если у меня есть массив:

int[] A = {1, 2}

И чтобы получить следующий результат

int[] P = {{}, {1}, {2}, {1, 2}}

person Michael    schedule 23.10.2016    source источник
comment
Гуава powerSet()?   -  person chrylis -cautiouslyoptimistic-    schedule 23.10.2016
comment
Не думаю, что это дубликат. В некоторых случаях мы можем не захотеть преобразовывать наш массив в Set. Предлагаемое решение этого вопроса быстрее, чем заданное.   -  person Simon Baars    schedule 15.05.2019


Ответы (1)


Попробуй это.

int[] a = {1, 2};
int max = 1 << a.length;
int[][] result = new int[max][];
for (int i = 0; i < max; ++i) {
    result[i] = new int[Integer.bitCount(i)];
    for (int j = 0, b = i, k = 0; j < a.length; ++j, b >>= 1)
        if ((b & 1) != 0)
            result[i][k++] = a[j];
}
System.out.println(Arrays.deepToString(result));

результат:

[[], [1], [2], [1, 2]]
person saka1029    schedule 23.10.2016
comment
Большое спасибо. - person Michael; 23.10.2016