如何有效地生成0,1,2...n中的所有数字。
(大n)。
这样对于固定的和变化的。
很容易发现x中所有值k的位在(0 <= k < n)中也是k & x = k
但我无法计算所有这些。
我用1找到k中所有集合位的子集和,得到所有可能的解。
但是这种方法在多个请求不同1的情况下证明是无效的。
我需要考虑每一个需要改变的地方来获得所有的可能性吗?还有其他有效的方法吗?我当然也不想和所有的x联系。

最佳答案

有一个很好的方法

for(int i = x ;; i = x & (i - 1)){
     print i;
     if(i == 0)
        break;
}

注意条件i = x & (i - 1)确保i总是递减并且只包含x中的位
请参见在here中运行Java代码
如果x > n,那么i应该从i = min(x, n - 1) & x开始。

08-16 20:56