Question

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

Example 1:

Input: 5 Output: True Explanation: The binary representation of 5 is: 101

Example 2:

Input: 7 Output: False Explanation: The binary representation of 7 is: 111.

Example 3:

Input: 11 Output: False Explanation: The binary representation of 11 is: 1011.

Example 4:

Input: 10 Output: True Explanation: The binary representation of 10 is: 1010.

Difficulty:Medium

Category:Bit-Manipulation

Analyze

这个对于中间分割数据, 相同的两位不一样的情况下, 数据 nn >> 1异或的话, 就可以得到全为 11111111 的数据, 我们只要判断得到的数所有位都是1就可以了.

Solution

class Solution {
 public:
  bool hasAlternatingBits(int n) {
    int a = (n ^ (n >> 1));
    if (a == INT_MAX) return true;
    return (a & long(a + 1)) == 0;
  }
};
By guozetang            Updated: 2020-09-19 13:02:30

results matching ""

    No results matching ""