- 342 Power of Four 判断
num
是不是4的幂
需要考察4的幂的形式。如果num
是4的幂,则num满足:
1. num>0
2. (num & (num-1)) == 0
3. (num ^ 0x55555555) !=0
2是因为
4
n
=
2
2
n
4^n = 2^{2n}
4n=22n,所以二进制表示中只有一个1,通过(num & (num-1))
来翻转这个唯一的1,结果应该为0。
3是因为,如果记最右一位是第1位的话,
4
n
=
2
2
n
4^n = 2^{2n}
4n=22n中唯一的1的位置一定在一个奇数位置上,使用0x55555555来进行筛选。
- 389 Find the Difference t比s多一个字符,其它只是顺序不同。
处理:xor
另外发现C++ 11 支持Range-based for loop
for(char c:s)
res ^= c;