int {1,2,3} 集合的组合是:
{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}
常见的解决方案是跟踪索引的代表性位掩码。
从我的 0-7 数字示例中:
000,001,010,011,100,101,110,111
该算法允许迭代解决方案,每次生成器遍历每个位并决定是否插入项目,因此它创建下一个运行时间为 O(n) 的组合。
格雷码:(来自维基百科)反射二进制码(RBC),在弗兰克格雷之后也被称为格雷码,是一种二进制数字系统,其中两个连续的值只有一位不同
如果我们只使用灰色数字,我们会得到这个数字范围:
000,001,011,010,110,111,101,100
结果以不同的顺序相同:
{},{1},{1,2},{2},{2,3},{1,2,3},{1,3},{3}
但在这里我们看到差异只有一项。是否可以使用格雷码范围在 O(1) 中实现生成器。
我知道如果迭代,返回的列表无论如何都会有 O(n) 运行时间。