这题真的是对mask的理解升华了
还有一个要注意的是xor的意义。我一直觉得做一个operation需要两个数,要save一个之前的,再apply到当前的数。
但是这题不用。
利用了异或的”自反性“: a ^ b = c,而a ^ b ^ b = a, 则 c ^ b = a
太牛逼了。。。。
有几个important things I was missing.
1. HashSet每轮declare一次。
2.我们为什么从左到右要这么做。
首先我们的temp是从left most significant bit开始设置的。也就是一开始为100000000000
第二次也许是01000000000 , 也有可能是11000000000[如果上一轮 set里存在两个数的first bit不一样的话]。
越多differ的bit between two numbers, 越多的1由于xor。那么如果这些1出现在left side,结果会越大。