package com.interview.algorithms.array; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * Created_By: zouzhile * Date: 11/1/14 * Time: 3:41 PM */ public class C4_14_AllSubsets { public Set<Set> findSubsets(Set<Integer> set) { Set<Set> subsets = new HashSet(); if(set.size() == 1) { HashSet<Integer> result = new HashSet<Integer>(); result.addAll(set); subsets.add(result); return subsets; } Iterator<Integer> itr = set.iterator(); while(itr.hasNext()) { int value = itr.next(); Set<Integer> clone = new HashSet<Integer>(); clone.addAll(set); clone.remove(value); for(Set currentSet : this.findSubsets(clone)) { subsets.add(currentSet); HashSet<Integer> currentClone = new HashSet(); currentClone.addAll(currentSet); currentClone.add(value); subsets.add(currentClone); } } return subsets; } public static void main(String[] args) { C4_14_AllSubsets finder = new C4_14_AllSubsets(); Set<Integer> set = new HashSet<Integer>(); set.add(1); set.add(2); set.add(3); for(Set subset : finder.findSubsets(set)) { Iterator<Integer> itr = subset.iterator(); while(itr.hasNext()) System.out.print(itr.next() + " "); System.out.println(); } } }