输出集合{1,2,…,n}的所有子集
注意,集合{1,2,…n}与任何一个含有n个元素的集合是同构的,所有下面的算法适用于求解任何的集合。
基于完全二叉树的深度优先搜索
以集合{1,2,3}为例:
基于bit pattern
对于一个含有n个元素的集合,可以用一个n位的2进制数来表这个集合,第i为1表示第i个元素在表示的集合中,否则不在 。
[对一个数加上1,体现在bit位上的效果就是从低位向高位寻找,找到第一个0 bit位之后,将这个bit位置1,并将他后面的所有低位置0]
[顺便提一下,对一个数减1,体现在bit位上的效果就是从低位向高位寻找,找到第一个1 bit位之后,将这个bit位置0,并将他后面的所有低位都置1—对应的题可参见【编程之美】]
按字典顺序排序
排在集合 { X,j,i} (X表示小于j的元素构成的某个集合)后面的集合为:
1. i< n 时,为 { X,j,i,i+1}
2. i= n 时,为