Menu Close

Leetcode 693: Binary Number with Alternating Bits

Here, we will help to understand about how to solve Binary Number with Alternating Bits solution of leet code 693 with code and algorithm.

You are given a positive integer. You have to check whether it has alternating bits or not. It means two adjacent bits will always have different values.

Example:

1)
Input: n = 10
Output: true
Explanation: The binary representation of 10 is: 1010
Here, adjacent bits are difference i.e 1 then 0 then 1 then 0 (1 -> 0 -> 1 -> 0)

2)
Input: n = 7
Output: false
Explanation: The binary representation of 7 is: 111
Here, adjacent bits are not difference i.e 1 then again 1 then again 1 (1 -> 1 -> 1 -> 1)

3)
Input: n = 15
Output: false
Explanation: The binary representation of 15 is: 1111
Here, adjacent bits are not difference i.e 1 then again 1 then again 1 then again 1(1 -> 1 -> 1 -> 1 -> 1)

4)
Input: n = 21
Output: true
Explanation: The binary representation of 21 is: 10101

Algorithm 1:

  • Get the first bit of number
  • Do right shift of number by 1
  • Iterate over bits of number
    • If the current bit is not equal to previous bit
      • Update the previous bit to current bit
      • Continue with loop
    • If the current bit is equal to previous bit
      • Both bits are equal , return false then
  • return true (all the bits are alternating bits)

Binary Number with Alternating Bits code in C++

Code 1:

#include <iostream>

using namespace std;

bool hasAlternatingBits(int n) {
    // Get the first bit
    int prev_bit = n & 1;
    n >>= 1;
        
    while(n) {
        // Compare prev_bit with current bit.
        if(prev_bit == (n & 1)) {
            
            // If both are equal then return false 
            return false;
        }
        prev_bit = n & 1;
        n >>= 1;
    }
    return true;
}

int main()
{
    cout<<hasAlternatingBits(10);

    return 0;
}

Code 2:

#include <iostream>

using namespace std;

bool hasAlternatingBits(int n) {
    int l = n % 2;

    n >>= 1;
    
    while (n > 0)
    {
        int current = n % 2;
        if (l == current)
            return (false);
        l = current;
        n >>= 1;
    }
    return true;
}

int main()
{
    cout<<hasAlternatingBits(10);

    return 0;
}

Code 3:

#include <iostream>

using namespace std;

bool hasAlternatingBits(int n) {
        
    int store=2;
        
    while(n) {
            
        if((n%2)==store)
            return 0;
        else
            store=n%2;
            
        n/=2;
            
    }
    return 1;
}

int main()
{
    cout<<hasAlternatingBits(10);

    return 0;
}

Output:

Input: 10 in bit's: 1010
Output: 1 i.e (true)

To check more leetcode problem’s solution. Pls click given below link:

https://www.techieindoor.com/category/leetcode/

Posted in C++, Easy, Leetcode

Leave a Reply

Your email address will not be published. Required fields are marked *