题目

类型:位运算
image.png

解题思路

利用交替位二进制数性质。

当给定值 n 为交替位二进制数时,将 n 右移一位得到的值 m 仍为交替位二进制数,且与原数 n 错开一位
两者异或能够得到形如 0000…1111的结果 x
对 x 执行加法能够得到形如 0000…10000 的结果,将该结果与 x 执行按位与后能够得到全 0 结果。

代码

  1. class Solution {
  2. public boolean hasAlternatingBits(int n) {
  3. int x = n ^ (n >> 1);
  4. return (x & (x + 1)) == 0;
  5. }
  6. }