用整数表示集合,某位为1表示对应元素被选取,在此规则下枚举所有子集的代码:
public class TraverseSubSet {
public static void ascending(int x) {
for ( int i=0; ; i=(i-x)&x ) {
System.out.printf("%h ", i);
if ( i == x ) break;
}
System.out.println();
}
public static void descending(int x) {
for ( int i=x; ; i=(i-1)&x ) {
System.out.printf("%h ", i);
if ( i == 0 ) break;
}
System.out.println();
}
public static void main(String[] args) {
ascending(0x1011);
descending(0x1011);
}
}