给定数字N ,我们的任务是打印大于N的整数N的排列。
例子:
Input: N = 534
Output: 543
Input: N = 324
Output: 342, 423, 432
方法:为解决此问题,我们可以使用C++中的next_permutation()方法来获得N在字典上的所有较大排列。获取所有此类数字后,将它们打印出来。
对于其他语言,找到数字N的排列并打印大于N的数字。
下面是上述方法的实现:
C++
// C++ implementation to print all the
// permutation greater than the integer N
#include
using namespace std;
// Function to print all the permutation
// which are greater than N itself
void printPermutation(int N)
{
int temp = N, count = 0;
// Iterate and count the
// number of digits in N
while (temp > 0) {
count++;
temp /= 10;
}
// vector to print the
// permutations of N
vector num(count);
// Store digits of N
// in the vector num
while (N > 0) {
num[count-- - 1] = N % 10;
N = N / 10;
}
// Iterate over every permutation of N
// which is greater than N
while (next_permutation(
num.begin(), num.end())) {
// Print the current permutaion of N
for (int i = 0; i < num.size(); i++)
cout << num[i];
cout << "\n";
}
}
// Driver Code
int main()
{
int N = 324;
printPermutation(N);
return 0;
}
Java
// Java implementation to print all the
// permutation greater than the integer N
import java.util.*;
class GFG{
static void printPermutation(int N)
{
int temp = N, count = 0;
// Iterate and count the
// number of digits in N
while (temp > 0)
{
count++;
temp /= 10;
}
// vector to print the
// permutations of N
int[] num = new int[count];
// Store digits of N
// in the vector num
while (N > 0)
{
num[count-- - 1] = N % 10;
N = N / 10;
}
// Iterate over every permutation of N
// which is greater than N
while (next_permutation(num))
{
// Print the current permutaion of N
for (int i = 0; i < num.length; i++)
System.out.print(num[i]);
System.out.print("\n");
}
}
// Function to print all the permutation
// which are greater than N itself
static boolean next_permutation(int[] p)
{
for (int a = p.length - 2; a >= 0; --a)
if (p[a] < p[a + 1])
for (int b = p.length - 1;; --b)
if (p[b] > p[a])
{
int t = p[a];
p[a] = p[b];
p[b] = t;
for (++a, b = p.length - 1; a < b; ++a, --b)
{
t = p[a];
p[a] = p[b];
p[b] = t;
}
return true;
}
return false;
}
// Driver Code
public static void main(String[] args)
{
int N = 324;
printPermutation(N);
}
}
// This code contributed by sapnasingh4991
C#
// C# implementation to print all the
// permutation greater than the integer N
using System;
class GFG{
static void printPermutation(int N)
{
int temp = N, count = 0;
// Iterate and count the
// number of digits in N
while (temp > 0)
{
count++;
temp /= 10;
}
// vector to print the
// permutations of N
int[] num = new int[count];
// Store digits of N
// in the vector num
while (N > 0)
{
num[count-- - 1] = N % 10;
N = N / 10;
}
// Iterate over every permutation of N
// which is greater than N
while (next_permutation(num))
{
// Print the current permutaion of N
for (int i = 0; i < num.Length; i++)
Console.Write(num[i]);
Console.Write("\n");
}
}
// Function to print all the permutation
// which are greater than N itself
static bool next_permutation(int[] p)
{
for (int a = p.Length - 2; a >= 0; --a)
if (p[a] < p[a + 1])
for (int b = p.Length - 1;; --b)
if (p[b] > p[a])
{
int t = p[a];
p[a] = p[b];
p[b] = t;
for (++a, b = p.Length - 1;
a < b; ++a, --b)
{
t = p[a];
p[a] = p[b];
p[b] = t;
}
return true;
}
return false;
}
// Driver Code
public static void Main(String[] args)
{
int N = 324;
printPermutation(N);
}
}
// This code is contributed by Rohit_ranjan
输出:
342
423
432