Open In App

K’th Boom Number

Improve
Improve
Like Article
Like
Save
Share
Report

Boom numbers are numbers consisting only of digits 2 and 3. Given an integer k (0<k<=10^7) , display the k-th Boom number. 
Examples: 

Input : k = 2
Output: 3

Input : k = 3
Output: 22

Input : k = 100
Output: 322323

Input: k = 1000000
Output: 3332322223223222223
Recommended Practice

The idea is very simple like Generate Binary Numbers . Here also we use same approach , 

we use queue data structure to solve this problem. First enqueue “2” then “3” these two are first and second boom number respectively. Now set count=2, for each time pop() front of queue and append “2” in popped number and increment count++ if (count==k) then print current Boom number else append “3” in popped number and increment count++ if (count==k) then print current Boom number. Repeat the process until we reach to K’th Boom number.

This approach can be seen as BFS of a tree with root as empty string. Left child of every node has a 2 appended and right child has 3 appended. 

Below is the implementation of this idea. 

C++




// C++ program to find K'th Boom number
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
 
// This function uses queue data structure to K'th
// Boom number
void  boomNumber(ll k)
{
    // Create an empty queue of strings
    queue<string> q;
 
    // Enqueue an empty string
    q.push("");
 
    // counter for K'th element
    ll count = 0;
 
    // This loop checks the value of count to
    // become equal to K when value of count
    // will be equals to k we will print the
    // Boom number
    while (count <= k)
    {
        // current Boom number
        string s1 = q.front();
 
        // pop front
        q.pop();
 
        // Store current Boom number before changing it
        string s2 = s1;
 
        // Append "2" to string s1 and enqueue it
        q.push(s1.append("2"));
        count++;
 
        // check if count==k
        if (count==k)
        {
            cout << s1 << endl; // K'th Boom number
            break;
        }
 
        // Append "3" to string s2 and enqueue it.
        // Note that s2 contains the previous front
        q.push(s2.append("3"));
        count++;
 
        // check if count==k
        if (count==k)
        {
            cout << s2 << endl; // K'th Boom number
            break;
        }
    }
    return ;
}
 
// Driver program to test above function
int main()
{
    ll k = 1000000;
    boomNumber(k);
    return 0;
}


Java




/*package whatever //do not write package name here */
import java.io.*;
import java.util.*;
 
class GFG
{
 
  // This function uses queue data structure to K'th
  // Boom number
  static void  boomNumber(long k)
  {
    // Create an empty queue of strings
    Queue<String> q = new LinkedList<String>();
 
    // Enqueue an empty string
    q.add("");
 
    // counter for K'th element
    long count = 0;
 
    // This loop checks the value of count to
    // become equal to K when value of count
    // will be equals to k we will print the
    // Boom number
    while (count <= k)
    {
      // current Boom number
      String s1 = q.poll();
 
 
      // Store current Boom number before changing it
      String s2 = s1;
 
      // Append "2" to string s1 and enqueue it
      q.add(s1+"2");
      count++;
 
      // check if count==k
      if (count==k)
      {
        System.out.println(s1); // K'th Boom number
        break;
      }
 
      // Append "3" to string s2 and enqueue it.
      // Note that s2 contains the previous front
      q.add(s2+"3");
      count++;
 
      // check if count==k
      if (count==k)
      {
        System.out.println(s2); // K'th Boom number
        break;
      }
    }
    return ;
  }
 
  // Driver code
  public static void main(String args[])
  {
    long k = 1000000;
    boomNumber(k);
  }
}
 
// This code is contributed by shinjanpatra


Python3




# Python3 program to find K'th Boom number
 
# This function uses queue data structure to K'th
# Boom number
def boomNumber(k):
 
    # Create an empty queue of strings
    q = []
 
    # Enqueue an empty string
    q.append("")
 
    # counter for K'th element
    count = 0
 
    # This loop checks the value of count to
    # become equal to K when value of count
    # will be equals to k we will print the
    # Boom number
    while (count <= k):
     
        # current Boom number
        s1 = q[0]
 
        # pop front
        q = q[1:]
 
        # Store current Boom number before changing it
        s2 = s1
 
        # Append "2" to string s1 and enqueue it
        s1 += '2'
        q.append(s1)
        count = count + 1
 
        # check if count==k
        if (count==k):
            print(s1) # K'th Boom number
            break
 
        # Append "3" to string s2 and enqueue it.
        # Note that s2 contains the previous front
        s2 += '3'
        q.append(s2)
        count = count + 1
 
        # check if count==k
        if (count==k):
            print(s2) # K'th Boom number
            break
    return
 
# Driver program to test above function
k = 1000000
boomNumber(k)
 
# This code is contributed by shinjanpatra


C#




// C# program to find K'th Boom number
using System;
using System.Collections;
 
class GFG{
 
// This function uses queue data structure
// to K'th Boom number
static void boomNumber(long k)
{
     
    // Create an empty queue of strings
    Queue q = new Queue();
  
    // Enqueue an empty string
    q.Enqueue("");
  
    // counter for K'th element
    long count = 0;
  
    // This loop checks the value of count to
    // become equal to K when value of count
    // will be equals to k we will print the
    // Boom number
    while (count <= k)
    {
         
        // current Boom number
        string s1 = (string)q.Dequeue();
  
        // Store current Boom number
        // before changing it
        string s2 = s1;
  
        // Append "2" to string s1 and
        // enqueue it
        s1 += "2";
        q.Enqueue(s1);
        count++;
  
        // Check if count==k
        if (count == k)
        {
             
            // K'th Boom number
            Console.Write(s1);
            break;
        }
  
        // Append "3" to string s2 and enqueue it.
        // Note that s2 contains the previous front
        s2 += "3";
        q.Enqueue(s2);
        count++;
  
        // Check if count==k
        if (count == k)
        {
             
            // K'th Boom number
            Console.Write(s2);
            break;
        }
    }
    return;
}   
 
// Driver code   
public static void Main(string []arg)
{
    long k = 1000000;
     
    boomNumber(k);
}
}
 
// This code is contributed by rutvik_56


Javascript




<script>
 
// JavaScript program to find K'th Boom number
 
// This function uses queue data structure to K'th
// Boom number
function boomNumber(k){
 
    // Create an empty queue of strings
    let q = []
 
    // Enqueue an empty string
    q.push("")
 
    // counter for K'th element
    let count = 0
 
    // This loop checks the value of count to
    // become equal to K when value of count
    // will be equals to k we will print the
    // Boom number
    while (count <= k){
     
        // current Boom number
        let s1 = q.shift()
 
        // Store current Boom number before changing it
        let s2 = s1
 
        // Append "2" to string s1 and enqueue it
        s1 += '2'
        q.push(s1)
        count = count + 1
 
        // check if count==k
        if (count==k){
            document.write(s1,"</br>") // K'th Boom number
            break
        }
 
        // Append "3" to string s2 and enqueue it.
        // Note that s2 contains the previous front
        s2 += '3'
        q.push(s2)
        count = count + 1
 
        // check if count==k
        if (count==k){
            document.write(s2,"</br>") // K'th Boom number
            break
        }
    }
    return
}
 
// Driver program to test above function
let k = 1000000
boomNumber(k)
 
// This code is contributed by shinjanpatra
 
</script>


Output

3332322223223222223

Time Complexity: O(K)
Auxiliary Space: O(n)

This article is reviewed by team GeeksforGeeks. 



Last Updated : 08 May, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads