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.
Intuition and Algorithm
\nLet\'s convert the given number into a string of binary digits. Then, we should simply check that no two adjacent digits are the same.
\n\nComplexity Analysis
\nTime Complexity: . For arbitrary inputs, we do work, where is the number of bits in n. However, .
Space complexity: , or alternatively .
\nIntuition and Algorithm
\nWe can get the last bit and the rest of the bits via n % 2 and n // 2 operations. Let\'s remember cur, the last bit of n. If the last bit ever equals the last bit of the remaining, then two adjacent bits have the same value, and the answer is False. Otherwise, the answer is True.
Also note that instead of n % 2 and n // 2, we could have used operators n & 1 and n >>= 1 instead.
Complexity Analysis
\nTime Complexity: . For arbitrary inputs, we do work, where is the number of bits in n. However, .
Space complexity: .
\nAnalysis written by: @awice
\n