Open In App

Check if a number has bits in alternate pattern | Set 1

Last Updated : 18 Mar, 2025
Suggest changes
Share
Like Article
Like
Report

Given an integer n > 0, the task is to find whether this integer has an alternate pattern in its bits representation. For example- 5 has an alternate pattern i.e. 101. 
Print "Yes" if it has an alternate pattern otherwise "No". Here alternate patterns can be like 0101 or 1010.

Examples: 

Input : 15
Output : No
Explanation: Binary representation of 15 is 1111.

Input : 10
Output : Yes
Explanation: Binary representation of 10 is 1010.

A naive approach to check if a number has bits in alternate patterns:

A simple approach is to find its binary equivalent and then check its bits.  

C++
// C++ program to find if a number has alternate bit pattern #include <bits/stdc++.h> using namespace std; // Returns true if n has alternate bit pattern else false bool findPattern(int n) {  // Store last bit  int prev = n % 2;  n = n / 2;  // Traverse through remaining bits  while (n > 0) {  int curr = n % 2;  // If current bit is same as previous  if (curr == prev)  return false;  prev = curr;  n = n / 2;  }  return true; } // Driver code int main() {  int n = 10;  if (findPattern(n))  cout << "Yes";  else  cout << "No";  return 0; } // This code is contributed by Sania Kumari Gupta (kriSania804) 
C
// C program to find if a number has alternate bit pattern #include <stdbool.h> #include <stdio.h> // Returns true if n has alternate bit pattern else false bool findPattern(int n) {  // Store last bit  int prev = n % 2;  n = n / 2;  // Traverse through remaining bits  while (n > 0) {  int curr = n % 2;  // If current bit is same as previous  if (curr == prev)  return false;  prev = curr;  n = n / 2;  }  return true; } // Driver code int main() {  int n = 10;  if (findPattern(n))  printf("Yes");  else  printf("No");  return 0; } // This code is contributed by Sania Kumari Gupta // (kriSania804) 
Java
// Java program to find if a number has alternate bit // pattern class Test {  // Returns true if n has alternate bit pattern  // else false  static boolean findPattern(int n)  {  // Store last bit  int prev = n % 2;  n = n / 2;  // Traverse through remaining bits  while (n > 0) {  int curr = n % 2;  // If current bit is same as previous  if (curr == prev)  return false;  prev = curr;  n = n / 2;  }  return true;  }  // Driver method  public static void main(String args[])  {  int n = 10;  System.out.println(findPattern(n) ? "Yes" : "No");  } } // This code is contributed by Sania Kumari Gupta // (kriSania804) 
Python
# Python3 program to find if a number  # has alternate bit pattern # Returns true if n has alternate  # bit pattern else false def findPattern(n): # Store last bit prev = n % 2 n = n // 2 # Traverse through remaining bits while (n > 0): curr = n % 2 # If current bit is same as previous if (curr == prev): return False prev = curr n = n // 2 return True # Driver code n = 10 print("Yes") if(findPattern(n)) else print("No") # This code is contributed by Anant Agarwal. 
C#
// Program to find if a number // has alternate bit pattern using System; class Test {  // Returns true if n has alternate  // bit pattern else returns false  static bool findPattern(int n)  {  // Store last bit  int prev = n % 2;  n = n / 2;  // Traverse through remaining bits  while (n > 0) {  int curr = n % 2;  // If current bit is same as previous  if (curr == prev)  return false;  prev = curr;  n = n / 2;  }  return true;  }  // Driver method  public static void Main()  {  int n = 10;  Console.WriteLine(findPattern(n) ? "Yes" : "No");  } } // This code is contributed by Anant Agarwal. 
JavaScript
<script> // Javascript program to find if a number // has alternate bit pattern // Returns true if n has alternate // bit pattern else false function findPattern(n) {    // Store last bit  let prev = n % 2;  n = Math.floor(n / 2);  // Traverse through remaining bits  while (n > 0)  {  let curr = n % 2;  // If current bit is   // same as previous  if (curr == prev)  return false;  prev = curr;  n = Math.floor(n / 2);  }  return true; } // Driver code let n = 10; if (findPattern(n))  document.write("Yes"); else  document.write("No");   // This code is contributed by gfgking </script> 

Output
Yes

Time Complexity: O(log2n)
Auxiliary Space: O(1)

An efficient approach to check if a number has bits in alternate patterns:

1) Right shift the number by 1 (x = n >> 1) so that all 1s become aligned with all 0s for an alternate bit pattern number.
2) Now do an XOR of x with n (y = x ^ n). This will have a number with all 1s. Note that XOR of two bits is 0 when they are same, otherwise 1.
3) Now we mainly need to check if all bits are set or not. To check this, we simply check if y & (y+1) is 0 or not.

C++
#include <iostream> using namespace std; // Returns true if n has alternate bit pattern else false bool findPattern(int n) {  if (n <= 1) return false; int x = n >> 1;  int y = x ^ n;  return (y & (y+1)) == 0; } // Driver code int main() { int n = 10; // equal to 10101 if (findPattern(n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; } 
C
// C program to find if a number has alternate bit pattern #include <stdbool.h> #include <stdio.h> // Returns 1 if n has alternate bit pattern else 0 bool findPattern(int n) {  if (n <= 1) return false;  int x = n >> 1;  int y = x ^ n;  return (y & (y+1)) == 0; } // Driver code int main() {  int n = 10; // equal to 10101  if (findPattern(n))  printf("Yes");  else  printf("No");  return 0; } // This code is contributed by "Madhukar Sharma" 
Java
public class Solution {  // Returns 1 if n has alternate bit pattern else 0  static boolean findPattern(int n)  {  if (n <= 1) return false;  int x = n >> 1;  int y = x ^ n;  return (y & (y + 1)) == 0;  }  // Driver code  public static void main(String[] args)  {  int n = 10; // equal to 10101  if (findPattern(n))  System.out.println("Yes");  else  System.out.println("No");  } } // This code is contributed by karandeep1234 
Python
# Returns True if n has alternate bit pattern else False def findPattern(n): if (n <= 1): return False x = n >> 1; y = x ^ n; return (y & (y+1)) == 0; # Driver code if __name__ == '__main__': n = 10 # equal to 10101 if findPattern(n): print("Yes") else: print("No") 
C#
using System; public class Solution {  // Returns true if n has alternate bit pattern else  // false  static bool FindPattern(int n)  {  if (n <= 1) return false;   int x = n >> 1;  int y = x ^ n;  return (y & (y + 1)) == 0;  }  // Driver code  public static void Main(string[] args)  {  int n = 10; // equal to 10101  if (FindPattern(n))  Console.WriteLine("Yes");  else  Console.WriteLine("No");  } } 
JavaScript
// Returns true if n has alternate bit pattern else false function findPattern(n) {  if (n <= 1) return false; let x = n >> 1;  let y = x ^ n;  return (y & (y+1)) == 0; } let n = 21; // equal to 10101 if (findPattern(n)) {  console.log("Yes"); } else {  console.log("No"); } 

Output
Yes 

Time Complexity: O(1)
Auxiliary Space: O(1)


Similar Reads

Article Tags :
Practice Tags :