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
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
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.
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
Die chinesische Übersetzung von
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; }
The next number or permutation for the given number is: 123
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!