Given a number n, our task is to find all 1 to n bit numbers with no consecutive 1s in their binary representation.
Examples:
Input: N = 4 Output: 1 2 4 5 8 9 10 These are numbers with 1 to 4 bits and no consecutive ones in binary representation. Input: n = 3 Output: 1 2 4 5
Approach:
- There will be 2n numbers with number of bits from 1 to n.
- Iterate through all 2n numbers. For every number check if it contains consecutive set bits or not. To check, we do bitwise and of current number i and left-shifted i. If the bitwise and contains a non-zero bit (or its value is non-zero), then the given number contains consecutive set bits.
Below is the implementation of the above approach:
// Print all numbers upto n bits
// with no consecutive set bits.
#include<iostream>
using namespace std;
void printNonConsecutive(int n)
{
// Let us first compute
// 2 raised to power n.
int p = (1 << n);
// loop 1 to n to check
// all the numbers
for (int i = 1; i < p; i++)
// A number i doesn't contain
// consecutive set bits if
// bitwise and of i and left
// shifted i don't contain a
// commons set bit.
if ((i & (i << 1)) == 0)
cout << i << " ";
}
// Driver code
int main()
{
int n = 3;
printNonConsecutive(n);
return 0;
}
// Java Code to Print all numbers upto
// n bits with no consecutive set bits.
import java.util.*;
class GFG
{
static void printNonConsecutive(int n)
{
// Let us first compute
// 2 raised to power n.
int p = (1 << n);
// loop 1 to n to check
// all the numbers
for (int i = 1; i < p; i++)
// A number i doesn't contain
// consecutive set bits if
// bitwise and of i and left
// shifted i doesn't contain a
// commons set bit.
if ((i & (i << 1)) == 0)
System.out.print(i + " ");
}
// Driver code
public static void main(String[] args)
{
int n = 3;
printNonConsecutive(n);
}
}
// This code is contributed by Mr. Somesh Awasthi
# Python3 program to print all numbers upto
# n bits with no consecutive set bits.
def printNonConsecutive(n):
# Let us first compute
# 2 raised to power n.
p = (1 << n)
# loop 1 to n to check
# all the numbers
for i in range(1, p):
# A number i doesn't contain
# consecutive set bits if
# bitwise and of i and left
# shifted i don't contain a
# common set bit.
if ((i & (i << 1)) == 0):
print(i, end = " ")
# Driver code
n = 3
printNonConsecutive(n)
# This code is contributed by Anant Agarwal.
// C# Code to Print all numbers upto
// n bits with no consecutive set bits.
using System;
class GFG
{
static void printNonConsecutive(int n)
{
// Let us first compute
// 2 raised to power n.
int p = (1 << n);
// loop 1 to n to check
// all the numbers
for (int i = 1; i < p; i++)
// A number i doesn't contain
// consecutive set bits if
// bitwise and of i and left
// shifted i don't contain a
// commons set bit.
if ((i & (i << 1)) == 0)
Console.Write(i + " ");
}
// Driver code
public static void Main()
{
int n = 3;
printNonConsecutive(n);
}
}
// This code is contributed by nitin mittal.
<?php
// Print all numbers upto n bits
// with no consecutive set bits.
function printNonConsecutive($n)
{
// Let us first compute
// 2 raised to power n.
$p = (1 << $n);
// loop 1 to n to check
// all the numbers
for ($i = 1; $i < $p; $i++)
// A number i doesn't contain
// consecutive set bits if
// bitwise and of i and left
// shifted i don't contain a
// commons set bit.
if (($i & ($i << 1)) == 0)
echo $i . " ";
}
// Driver code
$n = 3;
printNonConsecutive($n);
// This code is contributed by Sam007
?>
<script>
// Javascript Code to Print all numbers upto
// n bits with no consecutive set bits.
function printNonConsecutive(n)
{
// Let us first compute
// 2 raised to power n.
let p = (1 << n);
// loop 1 to n to check
// all the numbers
for (let i = 1; i < p; i++)
// A number i doesn't contain
// consecutive set bits if
// bitwise and of i and left
// shifted i don't contain a
// commons set bit.
if ((i & (i << 1)) == 0)
document.write(i + " ");
}
// driver program
let n = 3;
printNonConsecutive(n);
</script>
Output
1 2 4 5
Time Complexity: O(2N)
Auxiliary Space: O(1)