Calcular todos los subconjuntos de un conjunto de números

Quiero encontrar los subconjuntos de un conjunto de enteros. Es el primer paso del algoritmo "Suma de subconjuntos" con retroceso. He escrito el siguiente código, pero no devuelve la respuesta correcta:

BTSum(0, nums);
///**************
ArrayList<Integer> list = new ArrayList<Integer>();

public static ArrayList<Integer> BTSum(int n, ArrayList<Integer> numbers) {
    if (n == numbers.size()) {
        for (Integer integer : list) {
            System.out.print(integer+", ");
        }
        System.out.println("********************");
        list.removeAll(list);
        System.out.println();
    } else {
        for (int i = n; i < numbers.size(); i++) {
            if (i == numbers.size() - 1) {
                list.add(numbers.get(i));
                BTSum(i + 1, numbers);
            } else {
                list.add(numbers.get(i));
                for (int j = i+1; j < numbers.size(); j++)
                BTSum(j, numbers);
            }
        }
    }

    return null;
}

Por ejemplo, si quiero calcular los subconjuntos de set = {1, 3, 5} El resultado de mi método es:

 1, 3, 5, ********************

 5, ********************

 3, 5, ********************

 5, ********************

 3, 5, ********************

 5, ********************

Quiero que produzca:

1, 3, 5 
1, 5
3, 5
5

Creo que el problema es de la parte list.removeAll (list); Pero no sé cómo corregirlo.

Respuestas a la pregunta(12)

Su respuesta a la pregunta