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.
Constraints:
- 1 < = n < = 2 31 − 1 1 <= n <= 2^{31} - 1 1<=n<=231−1
From: LeetCode
Link: 693. Binary Number with Alternating Bits
Solution:
Ideas:
-
XOR operation: The key idea is to XOR the number with itself shifted by one position to the right. This operation results in a number where each bit represents whether two adjacent bits in the original number were different (1) or the same (0).
-
Check for all 1s: After XORing, we check if all bits in the result are set to 1. This would mean the original number had alternating bits. To do this, we add 1 to the result and perform a bitwise AND operation with the original result. If the result is zero, it confirms that all bits are alternating.
Code:
bool hasAlternatingBits(int n) {
// Shift the number right by one and XOR it with the original number
unsigned int shifted = (unsigned int)n ^ ((unsigned int)n >> 1);
// Check if the result has all bits set to 1 (i.e., the number is of the form 111...111)
return (shifted & (shifted + 1)) == 0;
}