Print all permutations of a number N greater than itself
Given a number N, our task is to print those permutations of integer N which are greater than N.
Examples:
Input: N = 534
Output: 543
Input: N = 324
Output: 342, 423, 432
Approach: To solve this problem, we can obtain all the lexicographically larger permutations of N using next_permutation() method in C++. After getting all such numbers, print them.
For other languages, find the permutations of number N and print the numbers which are greater than N.
Below is the implementation of above approach:
C++
// C++ implementation to print all the // permutation greater than the integer N #include <bits/stdc++.h> 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< int > 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 permutation 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 permutation 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 |
Python3
# Python3 implementation to print all the # permutation greater than the integer N # Function to print all the permutation # which are greater than N itself def next_permutation(p): for a in range ( len (p) - 2 , - 1 , - 1 ): if (p[a] < p[a + 1 ]): b = len (p) - 1 while True : if (p[b] > p[a]): t = p[a]; p[a] = p[b]; p[b] = t; a + = 1 b = len (p) - 1 while a < b: t = p[a]; p[a] = p[b]; p[b] = t; a + = 1 b - = 1 return True ; b - = 1 return False ; def printPermutation(N): temp = N count = 0 ; # Iterate and count the # number of digits in N while (temp > 0 ): count + = 1 temp = int (temp / 10 ) # vector to print the # permutations of N num = [ 0 for _ in range (count)]; # Store digits of N # in the vector num while (N > 0 ): count - = 1 num[count ] = N % 10 ; N = int (N / 10 ); # Iterate over every permutation of N # which is greater than N while (next_permutation(num)): # Print the current permutation of N print ( * num, sep = "") # Driver code N = 324 ; printPermutation(N); # This code is contributed by phasing17. |
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 permutation 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 |
Javascript
<script> // JavaScript implementation to print all the // permutation greater than the integer N function printPermutation(N) { let temp = N, count = 0; // Iterate and count the // number of digits in N while (temp > 0) { count++; temp = parseInt(temp / 10, 10); } // vector to print the // permutations of N let num = new Array(count); num.fill(0); // Store digits of N // in the vector num while (N > 0) { num[count-- - 1] = N % 10; N = parseInt(N / 10, 10); } // Iterate over every permutation of N // which is greater than N while (next_permutation(num)) { // Print the current permutation of N for (let i = 0; i < num.length; i++) document.write(num[i]); document.write( "</br>" ); } } // Function to print all the permutation // which are greater than N itself function next_permutation(p) { for (let a = p.length - 2; a >= 0; --a) if (p[a] < p[a + 1]) for (let b = p.length - 1;; --b) if (p[b] > p[a]) { let 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 ; } let N = 324; printPermutation(N); </script> |
Output:
342 423 432
Please Login to comment...