void getBitCombinations(BitSet bs, int start, int current, int target) { if (current == target) { // success, so store a copy of the BitSet in a Vector v.add(bs.clone()); return; } if (start == a.length) return; // failure bs.set(start); current++; getBitCombinations(bs, start + 1, current, target); bs.clear(start); current--; getBitCombinations(bs, start + 1, current, target); }
Example 1: A simple recursive solution to the problem of enumerating all combinations. In this and other listings, a is the underlying set; I use its length here and pass into the initial call of getBitCombinations() a BitSet of this length. v is a vector in the class's scope.