【发布时间】:2016-04-04 12:44:13
【问题描述】:
在我的应用程序中,我需要数组 1..n 的给定大小 k 的所有子集。
这可以使用递归方法轻松完成,并在此过程中存储所有找到的子集。 但是,我不希望我的应用程序使用指数级的内存 [O(n^k)]。
因此,我想编写一个实现(Java 的)Iterator 的类来迭代所述子集。
public class SubsetIterator implements Iterator<int[]> {
private int k;
private int[] array;
public SubsetIterator(int k, int[] array) {
this.k = k;
this.array = array;
}
@Override
public boolean hasNext() {
//To be implemented.
}
@Override
public int[] next() {
//To be implemented.
}
}
所以我可以这样使用它:
SubsetIterator iter = new SubsetIterator(k, array);
while (iter.hasNext) {
int[] next = iter.next();
//Do stuff
}
显然我们需要存储由next() 返回的当前子集,它被初始化为1..k。但是如何从当前子集计算下一个子集呢?
【问题讨论】:
-
以前很多人都做过同样的事情,我也是。请检查
hasNext()方法here