Related Articles
Print Nth Stepping or Autobiographical number
• Last Updated : 05 May, 2020

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 number``int` `NthSmallest(``int` `K)``{`` ` `    ``// Declare the queue``    ``queue<``int``> 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 Code``int` `main()``{`` ` `    ``// initialise K``    ``int` `N = 16;`` ` `    ``cout << NthSmallest(N) << ``"\n"``;`` ` `    ``return` `0;``}`

## Java

 `// Java implementation to find``// N'th stepping natural Number``import` `java.util.*;`` ` `class` `GFG{``  ` `// Function to find the``// Nth stepping natural number``static` `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 Code``public` `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 number``def` `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[``0``]`` ` `        ``# Perform Dequeue from the Queue``        ``Q.remove(Q[``0``])`` ` `        ``# 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 Code``if` `__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 Number``using` `System;``using` `System.Collections.Generic;`` ` `class` `GFG{``   ` `// Function to find the``// Nth stepping natural number``static` `int` `NthSmallest(``int` `K)``{``   ` `    ``// Declare the queue``    ``List<``int``> Q = ``new` `List<``int``>();``   ` `    ``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[0];``   ` `        ``// 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 Code``public` `static` `void` `Main(String[] args)``{``   ` `    ``// initialise K``    ``int` `N = 16;``   ` `    ``Console.Write(NthSmallest(N));``}``}`` ` `// This code is contributed by sapnasingh4991`
Output:
```32
```

Time Complexity: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up