Heim  >  Artikel  >  Backend-Entwicklung  >  Basierend auf der Priorität der Nummern lautet die Übersetzung wie folgt: Nächstgrößere Nummer basierend auf der Priorität der Nummern

Basierend auf der Priorität der Nummern lautet die Übersetzung wie folgt: Nächstgrößere Nummer basierend auf der Priorität der Nummern

王林
王林nach vorne
2023-08-28 08:45:101182Durchsuche

Basierend auf der Priorität der Nummern lautet die Übersetzung wie folgt: Nächstgrößere Nummer basierend auf der Priorität der Nummern

Im normalen Zahlensystem ist 0 die kleinste Zahl und 9 die größte Zahl. In diesem Problem erhalten wir eine Liste der Länge 10, von Index 0 bis Index 9 stellt eine Zahl dar, die die Priorität dieser Zahl darstellt. Die Liste wird in aufsteigender Reihenfolge angezeigt, was bedeutet, dass die Zahl, die am letzten Index erscheint, die höchste Priorität hat. Wir erhalten auch eine Zahl und müssen die nächste Zahl finden, die etwas größer als die aktuelle Zahl ist.

Input 1: 
Given number = “123”
Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7}
Output: 132

Erklärung

Aus dem angegebenen Prioritäts-Array können wir erkennen, dass 1 eine höhere Priorität als 2 und 3 hat. 3 hat eine höhere Priorität als 2. Wenn also die nächste Permutation einer bestimmten Zahl durch Vertauschen von 2 und 3 erreicht wird.

Input 2:
Given number = 132
Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7}
Output: 132

Erklärung

Aus dem gegebenen Prioritäts-Array können wir ersehen, dass die Priorität von 1 größer ist als die von 2 und 3. Die Priorität von 3 ist größer als die von 2. Es wird also keine nächste Permutation verfügbar sein.

Methode

Bei diesem Ansatz verwenden wir das Konzept der Standardvorlagenbibliothek (STL), die von der Programmiersprache C++ bereitgestellt wird, um die nächste Permutation zu erhalten. Sehen wir uns die Schritte an

  • Zuerst erhalten wir die Nummer der nächsten Nummer und ein Array, das die Priorität der Nummern in aufsteigender Reihenfolge darstellt.

  • Wir rufen die vordefinierte Funktion auf, um die nächste Zahl zu finden, die größer als die aktuell angegebene Zahl ist.

  • Wir werden eine Funktion definieren, die den Parameter Nummer und Array annimmt

  • Wir werden ein globales Array definieren und die Priorität jeder Ziffer aus dem angegebenen Array speichern, um sie später zu verwenden

  • Wir werden die angegebene Zahl in eine Zeichenfolge umwandeln, um die nächste Permutationsfunktion darauf anzuwenden.

  • Wir werden eine benutzerdefinierte Funktion definieren, die zum Vergleichen der Zeichen der Zeichenfolge in der nächsten Permutationsfunktion der STL verwendet wird

    Nachdem wir die nächste Permutation erhalten haben, konvertieren wir die Zeichenfolge in eine Ganzzahl und zurück.
  • Die chinesische Übersetzung von

    Beispiel
  • lautet:
Beispiel

#include <bits/stdc++.h>
using namespace std;
// priority array or array in which the priority of each digit will be stored 
int prio[10];
// defining the compare function 
bool compare(char& a, char& b){
   return prio[a-'0'] < prio[b-'0'];
}
// function to get the next permuatation 
int nextNum(int n, int arr[]){
   for(int i=0; i<10; i++){
      prio[arr[i]] = i;
   }
   // converting the given number into string 
   string str = to_string(n);
   // calling the next permuatation stl function for the given string we will compare by custom function 
   bool cur = next_permutation(str.begin(),str.end(),compare);
   if(cur == false){
      // indicating the next permutation does not exist 
      return n;
   }
   n = stoi(str); // converting string back to number 
   return n;
}
int main(){
   int n = 312; // the given number 
   int arr[] = {9, 2, 3, 6, 8, 1, 0, 5, 4, 7}; // given array
   cout<<"The next number or permutation for the given number is: "<<nextNum(n, arr);
   return 0;
}

Ausgabe

The next number or permutation for the given number is: 123

Zeit- und Raumkomplexität

Die zeitliche Komplexität des obigen Codes beträgt O(N), wobei N die Anzahl der Ziffern in der angegebenen Zahl ist

Die räumliche Komplexität des obigen Codes beträgt O(N), da wir eine neue Zeichenfolge erstellen, um die nächste Permutationsfunktion zu verwenden.

Hinweis

: Wenn die aktuelle Zahl die größere Zahl unter allen Permutationen ist, gibt die nächste Permutationsfunktion „false“ zurück und wir geben dieselbe Zahl zurück, da die nächste Permutation nicht existiert.

Fazit

In diesem Tutorial haben wir einen Code implementiert, um die nächste Zahl zu finden, die größer als die aktuelle Zahl ist, aber die Priorität der Zahlen ist nicht in der Reihenfolge von 0 bis 9, sondern wird in einem separaten Array angegeben. Wir haben die STL-Funktion next_permutation und eine benutzerdefinierte Funktion verwendet, um die nächste Zahl basierend auf der neuen Priorität zu erhalten. Die zeitliche und räumliche Komplexität des obigen Codes beträgt O (Anzahl der Ziffern).

Das obige ist der detaillierte Inhalt vonBasierend auf der Priorität der Nummern lautet die Übersetzung wie folgt: Nächstgrößere Nummer basierend auf der Priorität der Nummern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen