LeetCode 0693. Binary Number with Alternating Bits Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0693. 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 false. Otherwise, when the loop ends, we return true.

The time complexity is O(log n), and the space complexity is O(1).

PythonJavaC++GoTypeScriptRust
class Solution: def hasAlternatingBits(self, n: int) -> bool: prev = -1 while n: curr = n & 1 if prev == curr: return False prev = curr n >>= 1 return True(code-box)

Solution 2: Bit Manipulation

Assuming 01 appears alternately, we can convert all trailing bits to 1 through misaligned XOR. Adding 1 gives us a power of 2, which is a number n (where n has only one bit that is 1). Then, using n & (n + 1) can eliminate the last 1 bit.

At this point, check if it equals 0. If so, the assumption holds, and it is an alternating 01 sequence.

The time complexity is O(1), and the space complexity is O(1).

PythonJavaC++GoTypeScriptRust
class Solution: def hasAlternatingBits(self, n: int) -> bool: n ^= n >> 1 return (n & (n + 1)) == 0(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !