## 693. Binary Number with Alternating Bits

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

Example 1:

```Input: n = 5
Output: true
Explanation: The binary representation of 5 is: 101
```

Example 2:

```Input: n = 7
Output: false
Explanation: The binary representation of 7 is: 111.```

Example 3:

```Input: n = 11
Output: false
Explanation: The binary representation of 11 is: 1011.```

Example 4:

```Input: n = 10
Output: true
Explanation: The binary representation of 10 is: 1010.```

Example 5:

```Input: n = 3
Output: false
```

Constraints:

• `1 <= n <= 231 - 1`

## Rust Solution

``````struct Solution;

impl Solution {
fn has_alternating_bits(n: i32) -> bool {
let x = (n >> 1) ^ n;
(x + 1) & x == 0
}
}

#[test]
fn test() {
assert_eq!(Solution::has_alternating_bits(5), true);
assert_eq!(Solution::has_alternating_bits(7), false);
assert_eq!(Solution::has_alternating_bits(11), false);
assert_eq!(Solution::has_alternating_bits(1), true);
}
``````

Having problems with this solution? Click here to submit an issue on github.