📜  相邻数字的绝对差最大为1的第N个正数

📅  最后修改于: 2021-09-04 08:36:50             🧑  作者: Mango

• 准备一个空队列，并按递增顺序将所有整数 1 到 9 入队。
• 现在执行以下操作 N 次。
• 出列并存储在数组arr 中，该数组在 arr[i] 中存储第 i 个所需类型。
• 如果 (arr[i] % 10 != 0)，则入队10 * arr[i] + (arr[i] % 10) – 1
• 入队10 * arr[i] + (arr[i] % 10)
• 如果 (arr[i] % 10 != 9)，则入队10 * arr[i] + (arr[i] % 10) + 1
• 返回arr[N]作为答案。

##### C++
``````// C++ Program to find Nth number with
// absolute difference between all
// adjacent digits at most 1.

#include
using namespace std;

// Return Nth number with
// absolute difference between all
// adjacent digits at most 1.
void findNthNumber(int N)
{
// To store all such numbers
long long arr[N + 1];

queue q;

// Enqueue all integers from 1 to 9
// in increasing order.
for (int i = 1; i <= 9; i++)
q.push(i);

// Perform the operation N times so that
// we can get all such N numbers.
for (int i = 1; i <= N; i++) {

// Store the front element of queue,
// in array and pop it from queue.
arr[i] = q.front();
q.pop();

// If the last digit of dequeued integer is
// not 0, then enqueue the next such number.
if (arr[i] % 10 != 0)
q.push(arr[i] * 10 + arr[i] % 10 - 1);

// Enqueue the next such number
q.push(arr[i] * 10 + arr[i] % 10);

// If the last digit of dequeued integer is
// not 9, then enqueue the next such number.
if (arr[i] % 10 != 9)
q.push(arr[i] * 10 + arr[i] % 10 + 1);
}

cout<``````
``` ```
``` Java // Java program to find Nth number with // absolute difference between all // adjacent digits at most 1. import java.util.*;   class GFG{   // Return Nth number with // absolute difference between all // adjacent digits at most 1. static void findNthNumber(int N) {           // To store all such numbers     int []arr = new int[N + 1];           Queue q = new LinkedList<>();       // Enqueue all integers from 1 to 9     // in increasing order.     for(int i = 1; i <= 9; i++)        q.add(i);       // Perform the operation N times so     // that we can get all such N numbers.     for(int i = 1; i <= N; i++)     {                 // Store the front element of queue,        // in array and pop it from queue.        arr[i] = q.peek();        q.remove();                 // If the last digit of dequeued        // integer is not 0, then enqueue        // the next such number.        if (arr[i] % 10 != 0)            q.add(arr[i] * 10 + arr[i] % 10 - 1);                 // Enqueue the next such number        q.add(arr[i] * 10 + arr[i] % 10);                 // If the last digit of dequeued        // integer is not 9, then enqueue        // the next such number.        if (arr[i] % 10 != 9)            q.add(arr[i] * 10 + arr[i] % 10 + 1);     }     System.out.println(arr[N]); }   // Driver Code public static void main(String[] args) {     int N = 21;           findNthNumber(N); } }   // This code is contributed by Amit Katiyar Python3 # Python 3 Program to find Nth number with # absolute difference between all # adjacent digits at most 1.   # Return Nth number with # absolute difference between all # adjacent digits at most 1. def findNthNumber(N):           # To store all such numbers     arr = [0 for i in range(N + 1)]           q = []       # Enqueue all integers from 1 to 9     # in increasing order.     for i in range(1, 10, 1):         q.append(i)       # Perform the operation N times so that     # we can get all such N numbers.     for i in range(1, N+1, 1):                   # Store the front element of queue,         # in array and pop it from queue.         arr[i] = q[0]         q.remove(q[0])           # If the last digit of dequeued integer is         # not 0, then enqueue the next such number.         if (arr[i] % 10 != 0):             q.append(arr[i] * 10 + arr[i] % 10 - 1)           # Enqueue the next such number         q.append(arr[i] * 10 + arr[i] % 10)           # If the last digit of dequeued integer is         # not 9, then enqueue the next such number.         if (arr[i] % 10 != 9):             q.append(arr[i] * 10 + arr[i] % 10 + 1)           print(arr[N])   # Driver Code if __name__ == '__main__':           N = 21     findNthNumber(N)   # This code is contributed by Samarth C# // C# program to find Nth number with // absolute difference between all // adjacent digits at most 1. using System; using System.Collections.Generic;   class GFG{   // Return Nth number with // absolute difference between all // adjacent digits at most 1. static void findNthNumber(int N) {           // To store all such numbers     int []arr = new int[N + 1];           Queue q = new Queue();       // Enqueue all integers from 1 to 9     // in increasing order.     for(int i = 1; i <= 9; i++)        q.Enqueue(i);       // Perform the operation N times so     // that we can get all such N numbers.     for(int i = 1; i <= N; i++)     {                 // Store the front element of queue,        // in array and pop it from queue.        arr[i] = q.Peek();        q.Dequeue();                 // If the last digit of dequeued        // integer is not 0, then enqueue        // the next such number.        if (arr[i] % 10 != 0)            q.Enqueue(arr[i] * 10 +                      arr[i] % 10 - 1);                 // Enqueue the next such number        q.Enqueue(arr[i] * 10 + arr[i] % 10);                 // If the last digit of dequeued        // integer is not 9, then enqueue        // the next such number.        if (arr[i] % 10 != 9)            q.Enqueue(arr[i] * 10 +                      arr[i] % 10 + 1);     }     Console.WriteLine(arr[N]); }   // Driver Code public static void Main(String[] args) {     int N = 21;           findNthNumber(N); } }   // This code is contributed by Rohit_ranjan ```
``` 输出： 45 如果您想与行业专家一起参加直播课程，请参阅Geeks Classes Live ```
``` ```
``` ```
``` ```
``` ```
``` ```
``` Copyright © 2020 - 2024 版权所有 蜀ICP备20006366号-1 Made with ❤️ in Chengdu ```