如何有效地生成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
开始。