693. Binary Number with Alternating Bits
Description
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 <= 231 - 1
Solutions
Solution 1: Simulation
We cyclically right-shift \(n\) until it becomes \(0\), checking whether the binary bits of \(n\) appear alternately. If during the loop we find that \(0\) and \(1\) do not appear alternately, we directly return \(\textit{false}\). Otherwise, when the loop ends, we return \(\textit{true}\).
The time complexity is \(O(\log n)\), and the space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Solution 2: Bit Manipulation
Assuming \(\text{01}\) appears alternately, we can convert all trailing bits to \(\text{1}\) through misaligned XOR. Adding \(\text{1}\) gives us a power of \(2\), which is a number \(n\) (where \(n\) has only one bit that is \(\text{1}\)). Then, using \(\text{n} \& (\text{n} + 1)\) can eliminate the last \(\text{1}\) bit.
At this point, check if it equals \(\text{0}\). If so, the assumption holds, and it is an alternating \(\text{01}\) sequence.
The time complexity is \(O(1)\), and the space complexity is \(O(1)\).
1 2 3 4 | |
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 | |
1 2 3 4 | |
1 2 3 4 | |
1 2 3 4 5 6 | |