Print Nth Stepping or Autobiographical number

• Last Updated : 21 Nov, 2021

Given a natural number N, the task is to print the Nth Stepping or Autobiographical number.

A number is called stepping number if all adjacent digits have an absolute difference of 1. The following series is a list of Stepping natural numbers:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 23, 32, ….

Examples:

Input: N = 16
Output: 32
Explanation:
16th Stepping number is 32.

Input: N = 14
Output: 22
Explanation:
14th Stepping number is 22.

Approach: This problem can be solved using Queue data structure. First, prepare an empty queue, and Enqueue 1, 2, …, 9 in this order
Then inorder the generate the Nth Stepping number, the following operations has to be performed N times:

• Perform Dequeue from the Queue. Let x be the dequeued element.
• If x mod 10 is not equal to 0, then Enqueue 10x + (x mod 10) – 1
• Enqueue 10x + (x mod 10).
• If x mod 10 is not equal to 9, then Enqueue 10x + (x mod 10) + 1.

The dequeued number in the N-th operation is the N-th Stepping Number.
Below is the implementation of the above approach:

C++

 // C++ implementation to find// N’th stepping natural Number#include using namespace std; // Function to find the// Nth stepping natural numberint NthSmallest(int K){     // Declare the queue    queue Q;     int x;     // Enqueue 1, 2, ..., 9 in this order    for (int i = 1; i < 10; i++)        Q.push(i);     // Perform K operation on queue    for (int i = 1; i <= K; i++) {         // Get the ith Stepping number        x = Q.front();         // Perform Dequeue from the Queue        Q.pop();         // If x mod 10 is not equal to 0        if (x % 10 != 0) {             // then Enqueue 10x + (x mod 10) - 1            Q.push(x * 10 + x % 10 - 1);        }         // Enqueue 10x + (x mod 10)        Q.push(x * 10 + x % 10);         // If x mod 10 is not equal to 9        if (x % 10 != 9) {             // then Enqueue 10x + (x mod 10) + 1            Q.push(x * 10 + x % 10 + 1);        }    }     // Return the dequeued number of the K-th    // operation as the Nth stepping number    return x;} // Driver Codeint main(){     // initialise K    int N = 16;     cout << NthSmallest(N) << "\n";     return 0;}

Java

 // Java implementation to find// N'th stepping natural Numberimport java.util.*; class GFG{  // Function to find the// Nth stepping natural numberstatic int NthSmallest(int K){      // Declare the queue    Queue Q = new LinkedList<>();      int x = 0;      // Enqueue 1, 2, ..., 9 in this order    for (int i = 1; i < 10; i++)        Q.add(i);      // Perform K operation on queue    for (int i = 1; i <= K; i++) {          // Get the ith Stepping number        x = Q.peek();          // Perform Dequeue from the Queue        Q.remove();          // If x mod 10 is not equal to 0        if (x % 10 != 0) {              // then Enqueue 10x + (x mod 10) - 1            Q.add(x * 10 + x % 10 - 1);        }          // Enqueue 10x + (x mod 10)        Q.add(x * 10 + x % 10);          // If x mod 10 is not equal to 9        if (x % 10 != 9) {              // then Enqueue 10x + (x mod 10) + 1            Q.add(x * 10 + x % 10 + 1);        }    }      // Return the dequeued number of the K-th    // operation as the Nth stepping number    return x;}  // Driver Codepublic static void main(String[] args){      // initialise K    int N = 16;      System.out.print(NthSmallest(N));}} // This code is contributed by 29AjayKumar

Python3

 # Python3 implementation to find# N’th stepping natural Number # Function to find the# Nth stepping natural numberdef NthSmallest(K):    # Declare the queue    Q = []     # Enqueue 1, 2, ..., 9 in this order    for i in range(1,10):        Q.append(i)     # Perform K operation on queue    for i in range(1,K+1):        # Get the ith Stepping number        x = Q         # Perform Dequeue from the Queue        Q.remove(Q)         # If x mod 10 is not equal to 0        if (x % 10 != 0):            # then Enqueue 10x + (x mod 10) - 1            Q.append(x * 10 + x % 10 - 1)         # Enqueue 10x + (x mod 10)        Q.append(x * 10 + x % 10)         # If x mod 10 is not equal to 9        if (x % 10 != 9):            # then Enqueue 10x + (x mod 10) + 1            Q.append(x * 10 + x % 10 + 1)     # Return the dequeued number of the K-th    # operation as the Nth stepping number    return x # Driver Codeif __name__ == '__main__':    # initialise K    N = 16     print(NthSmallest(N)) # This code is contributed by Surendra_Gangwar

C#

 // C# implementation to find// N'th stepping natural Numberusing System;using System.Collections.Generic; class GFG{   // Function to find the// Nth stepping natural numberstatic int NthSmallest(int K){       // Declare the queue    List Q = new List();       int x = 0;       // Enqueue 1, 2, ..., 9 in this order    for (int i = 1; i < 10; i++)        Q.Add(i);       // Perform K operation on queue    for (int i = 1; i <= K; i++) {           // Get the ith Stepping number        x = Q;           // Perform Dequeue from the Queue        Q.RemoveAt(0);           // If x mod 10 is not equal to 0        if (x % 10 != 0) {               // then Enqueue 10x + (x mod 10) - 1            Q.Add(x * 10 + x % 10 - 1);        }           // Enqueue 10x + (x mod 10)        Q.Add(x * 10 + x % 10);           // If x mod 10 is not equal to 9        if (x % 10 != 9) {               // then Enqueue 10x + (x mod 10) + 1            Q.Add(x * 10 + x % 10 + 1);        }    }       // Return the dequeued number of the K-th    // operation as the Nth stepping number    return x;}   // Driver Codepublic static void Main(String[] args){       // initialise K    int N = 16;       Console.Write(NthSmallest(N));}} // This code is contributed by sapnasingh4991

Javascript


Output:
32

Time Complexity: O(N)

Auxiliary Space: O(N)

My Personal Notes arrow_drop_up