# An Interesting Method to Generate Binary Numbers from 1 to n

• Difficulty Level : Medium
• Last Updated : 15 Jun, 2021

Given a number n, write a function that generates and prints all binary numbers with decimal values from 1 to n.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```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 –

Following is an interesting method that uses queue data structure to print binary numbers. Thanks to Vivek for suggesting this approach.

```1) Create an empty queue of strings
2) Enqueue the first binary number "1" to queue.
3) Now run a loop for generating and printing n binary numbers.
......a) Dequeue and Print the front of queue.
......b) Append "0" at the end of front item and enqueue it.
......c) Append "1" at the end of front item and enqueue it.```

Following is implementation of above algorithm.

## C++

 `// C++ program to generate binary numbers from 1 to n``#include ``using` `namespace` `std;` `// This function uses queue data structure to print binary``// numbers``void` `generatePrintBinary(``int` `n)``{``    ``// Create an empty queue of strings``    ``queue 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 function``int` `main()``{``    ``int` `n = 10;``    ``generatePrintBinary(n);``    ``return` `0;``}`

## Java

 `// 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 q = ``new` `LinkedList();` `        ``// 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

 `# Python program to generate binary numbers from``# 1 to n` `# This function uses queu data structure to print binary numbers`  `def` `generatePrintBinary(n):` `    ``# Create an empty queue``    ``from` `Queue ``import` `Queue``    ``q ``=` `Queue()` `    ``# Enqueu 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 function``n ``=` `10``generatePrintBinary(n)` `# This code is contributed by Nikhil Kumar Singh(nickzuck_007)`

## C#

 `// C# program to generate binary``// numbers from 1 to n``using` `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`

## Javascript

 ``
Output
```1
10
11
100
101
110
111
1000
1001
1010```

Time Complexity: O(n)