利用2进制的想法。
一个集合比如{a,b,c}
对应二进制表示
0 { }
1 {c}
010 {b}
011 {b,c}
100 {a}
101 {a,c}
110 {a,b}
111 {a,b,c}
-
public void printAllSubSet(int []a){ int n=a.length; int i=0; n=(int)Math.pow(2, n); for(i=1;i<n;i++){ String s=Integer.toBinaryString(i); //System.out.println(s); int k=s.length()-1; for(int j=a.length-1;j>=0&&k>=0;j--,k--){ if(s.charAt(k)=='1'){ System.out.print(a[j]+" "); } } System.out.println(); } }
这里最后输出的结果是反的,因为Integer.toBinaryString()忽略了一个数前面的0。