My solution in java
public class PowerSet
{
public static void main(String[] args)
{
Object[] set = {1,2,3};//change to whatever variable type
LinkedHashSet myPowerSet = powerset(set);
System.out.println(myPowerSet.toString());
}
/**
* Returns the power set from the given set by using a binary counter
* Example: S = {a,b,c}
* P(S) = {[], [c], [b], [b, c], [a], [a, c], [a, b], [a, b, c]}
* @param set Obect[]
* @return LinkedHashSet
*/
private static LinkedHashSet powerset(Object[] set)
{
//create the empty power set
LinkedHashSet power = new LinkedHashSet();
//get the number of elements in the set
int elements = set.length;
//the number of members of a power set is 2^n
int powerElements = (int) Math.pow(2, elements);
for (int i = 0; i < powerElements; i++) {
String binary = binaryValue(i, elements);
LinkedHashSet innerSet = new LinkedHashSet();
for (int j = 0; j < binary.length(); j++) {
if (binary.charAt(j) == '1') {
innerSet.add(set[j]);
}
}
power.add(innerSet);
}
return power;
}
/**
* Converts the given integer to a String representing a binary number
* with the specified number of digits
* For example when using 4 digits the binary 1 is 0001
* @param binary int
* @param digits int
* @return String
*/
private static String binaryValue(int binary, int digits)
{
String temp = Integer.toBinaryString(binary);
int foundDigits = temp.length();
String returner = temp;
for (int i = foundDigits; i < digits; i++) {
returner = "0" + returner;
}
return returner;
}
}