在正常的数字系统中,0是最小的数字,而9是最大的数字。在这个问题中,我们将得到一个长度为10的列表,从索引0到索引9表示一个数字,它表示该数字的优先级,列表将按照递增顺序排列,这意味着出现在最后索引的数字具有最高的优先级。我们还将得到一个数字,我们需要找到比当前数字稍大的下一个数字。
Input 1:
Given number = “123”
Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7}
Output: 132
登录后复制
Explanation
从给定的优先级数组中,我们可以看到1的优先级大于2和3。与2相比,3的优先级更高。因此,如果给定数字的下一个排列将通过交换2和3来实现。
Input 2:
Given number = 132
Given array = { 9, 2, 3, 6, 8, 1, 0, 5, 4, 7}
Output: 132
登录后复制
Explanation
From the given priority array, we can see that the priority of 1 is greater than both 2 and 3. Priority of 3 is greater as compared to of 2. So, there will be no next permutation available.
方法
In this approach, we will use the concept of the standard template library (STL) provided by the C++ programming language to get the next permutation. Let us see the steps −
-
首先,我们将得到下一个数字的数字,以及一个按升序表示数字优先级的数组。
-
我们将调用预定义的函数来找到大于当前给定数字的下一个数字。
-
We will define a function that take the parameter given number and array.
-
We will define a global array and store the priority of each digit taken from the given array to use later.
-
我们将把给定的数字转换为字符串,以便在其上应用下一个排列函数。
-
We will define a custom function that will used to compare the characters of the string in the next permutation function of the stl.
-
获取下一个排列后,我们将把字符串转换为整数并返回。
Example
的中文翻译为:
示例
#include
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