The total number of subsets for any given set of size ‘n’ is 2^n (nC0 + nC1 + nC2 + ….. + nCn). In the following program we use all the possible binary values between 0 (inclusive) and 2^n. In every number if it is 1 then the element is in the subset or else it is omitted.
const generateSubsets = (inp) => {
if (!Array.isArray(inp)) {
return;
}
var n = inp.length;
var allSubsets = [];
for (var i = 0; i < (Math.pow(2, n)); i++) {
var subset = [];
for (var j = 0; j < n; j++) {
if (i & (1 << j)) {
subset.push(inp[j]);
}
}
allSubsets.push(subset);
}
return allSubsets;
};
console.log(generateSubsets([1, 2, 3]));
// [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]Method 2
const generateSubsets = (inp) => {
if (!Array.isArray(inp)) {
return;
}
let subsets = [];
for (const val of inp) {
const tempSubsets = […subsets];
for (const currSubset of tempSubsets) {
subsets.push([…currSubset, val]);
}
subsets.push([val]);
}
subsets.push([]);
return subsets;
};
console.log(generateSubsets([1, 2, 3]));
// [[], [1, 2], [2], [1, 3], [1, 2, 3], [2, 3], [3], [0]]