An Interesting Method to Generate Binary Numbers from 1 to n

23 Jun, 2022
Given a number n, write a function that generates and prints all binary numbers with decimal values from 1 to n. 
Examples: 
Input: n = 2
Output: 1, 10

Input: n = 5
Output: 1, 10, 11, 100, 101
Naive Method:
A simple method is to run a loop from 1 to n, call decimal to binary inside the loop. 
Efficient Method: 
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
Following is an interesting method that uses queue data structure to print binary numbers. Thanks to Vivek for suggesting this approach. 
Create an empty queue of strings Enqueue the first binary number “1” to queue. Now run a loop for generating and printing n binary numbers. Dequeue and Print the front of queue. Append “0” at the end of front item and enqueue it. Append “1” at the end of front item and enqueue it.
Create an empty queue of strings 
Enqueue the first binary number “1” to queue. 
Now run a loop for generating and printing n binary numbers. Dequeue and Print the front of queue. Append “0” at the end of front item and enqueue it. Append “1” at the end of front item and enqueue it.
Dequeue and Print the front of queue. 
Append “0” at the end of front item and enqueue it. 
Append “1” at the end of front item and enqueue it.
Following is the implementation of above algorithm.
C++
Java
Python3
C#
Javascript
// C++ program to generate binary numbers from 1 to n#include <bits/stdc++.h>using namespace std; // This function uses queue data structure to print binary// numbersvoid generatePrintBinary(int n){    // Create an empty queue of strings    queue<string> q;     // Enqueue the first binary number    q.push("1");     // This loops is like BFS of a tree with 1 as root    // 0 as left child and 1 as right child and so on    while (n--) {        // print the front of queue        string s1 = q.front();        q.pop();        cout << s1 << "\n";         string s2 = s1; // Store s1 before changing it         // Append "0" to s1 and enqueue it        q.push(s1.append("0"));         // Append "1" to s2 and enqueue it. Note that s2        // contains the previous front        q.push(s2.append("1"));    }} // Driver program to test above functionint main(){    int n = 10;    generatePrintBinary(n);    return 0;}
// Java program to generate binary numbers from 1 to n import java.util.LinkedList;import java.util.Queue; public class GenerateBNo {    // This function uses queue data structure to print    // binary numbers    static void generatePrintBinary(int n)    {        // Create an empty queue of strings        Queue<String> q = new LinkedList<String>();         // Enqueue the first binary number        q.add("1");         // This loops is like BFS of a tree with 1 as root        // 0 as left child and 1 as right child and so on        while (n-- > 0) {            // print the front of queue            String s1 = q.peek();            q.remove();            System.out.println(s1);             // Store s1 before changing it            String s2 = s1;             // Append "0" to s1 and enqueue it            q.add(s1 + "0");             // Append "1" to s2 and enqueue it. Note that s2            // contains the previous front            q.add(s2 + "1");        }    }     // Driver program to test above function    public static void main(String[] args)    {        int n = 10;        generatePrintBinary(n);    }}// This code is contributed by Sumit Ghosh
# Python program to generate binary numbers from# 1 to n # This function uses queue data structure to print binary numbers  def generatePrintBinary(n):     # Create an empty queue    from queue import Queue    q = Queue()     # Enqueue the first binary number    q.put("1")     # This loop is like BFS of a tree with 1 as root    # 0 as left child and 1 as right child and so on    while(n > 0):        n -= 1        # Print the front of queue        s1 = q.get()        print (s1)         s2 = s1  # Store s1 before changing it         # Append "0" to s1 and enqueue it        q.put(s1+"0")         # Append "1" to s2 and enqueue it. Note that s2        # contains the previous front        q.put(s2+"1")  # Driver program to test above functionn = 10generatePrintBinary(n) # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
// C# program to generate binary// numbers from 1 to nusing System;using System.Collections.Generic; class GFG {    // This function uses queue data    // structure to print binary numbers    public static void generatePrintBinary(int n)    {        // Create an empty queue of strings        LinkedList<string> q = new LinkedList<string>();         // Enqueue the first binary number        q.AddLast("1");         // This loops is like BFS of a tree        // with 1 as root 0 as left child        // and 1 as right child and so on        while (n-- > 0) {            // print the front of queue            string s1 = q.First.Value;            q.RemoveFirst();            Console.WriteLine(s1);             // Store s1 before changing it            string s2 = s1;             // Append "0" to s1 and enqueue it            q.AddLast(s1 + "0");             // Append "1" to s2 and enqueue it.            // Note that s2 contains the previous front            q.AddLast(s2 + "1");        }    }     // Driver Code    public static void Main(string[] args)    {        int n = 10;        generatePrintBinary(n);    }} // This code is contributed by Shrikant13
<script> // JavaScript program to generate binary numbers from 1 to n // This function uses queue data structure to print binary// numbersfunction generatePrintBinary(n){    // Create an empty queue of strings    var q = [];     // Enqueue the first binary number    q.push("1");     // This loops is like BFS of a tree with 1 as root    // 0 as left child and 1 as right child and so on    while (n--) {        // print the front of queue        var s1 = q[0];        q.shift();        document.write( s1 + "<br>");         var s2 = s1; // Store s1 before changing it         // Append "0" to s1 and enqueue it        q.push(s1+"0");         // Append "1" to s2 and enqueue it. Note that s2        // contains the previous front        q.push(s2+"1");    }} // Driver program to test above functionvar n = 10;generatePrintBinary(n); </script>
1
10
11
100
101
110
111
1000
1001
1010
Time Complexity: O(n) 
Space Complexity: O(n) as extra space is required in this method
This article is contributed by Abhishek. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
shrikanth13
gp6
kumarmenish8
rrrtnx
amartyaghoshgfg
surinderdawra388
technophpfij
hardikkoriintern
Amazon
Queue
Amazon
Queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
What is Priority Queue | Introduction to Priority Queue
Sliding Window Maximum (Maximum of all subarrays of size k)
What is Data Structure: Types, Classifications and Applications
Queue - Linked List Implementation
Minimum steps to reach target by a Knight | Set 1
Array implementation of queue (Simple)
Circular Queue | Set 1 (Introduction and Array Implementation)
Priority Queue in Python
Print Nodes in Top View of Binary Tree