Java program to find Next Permutation
Next Permutation in Java
Here, on this page, we will discuss the program to find the next permutation in Java. We are Given a word and need to find the lexicographically greater permutation of it. For example, lexicographically next permutation of “acb” is “bac”
- Find the longest non-increasing suffix and find the pivot.
- If the suffix is the whole array, then there is no higher order permutation for the data.
- Find the rightmost successor to the pivot.
- Swap the successor and the pivot.
- Reverse the suffix.
Run
import java.util.Arrays; public class Main { public static int[] swap(int data[], int left, int right) { // Swap the data int temp = data[left]; data[left] = data[right]; data[right] = temp; // Return the updated array return data; } public static int[] reverse(int data[], int left, int right) { // Reverse the sub-array while (left < right) { int temp = data[left]; data[left++] = data[right]; data[right--] = temp; } // Return the updated array return data; } public static boolean findNextPermutation(int data[]) { if (data.length <= 1) return false; int last = data.length - 2; while (last >= 0) { if (data[last] < data[last + 1]) { break; } last--; } if (last < 0) return false; int nextGreater = data.length - 1; // Find the rightmost successor to the pivot for (int i = data.length - 1; i > last; i--) { if (data[i] > data[last]) { nextGreater = i; break; } } data = swap(data, nextGreater, last); data = reverse(data, last + 1, data.length - 1); return true; } // Driver Code public static void main(String args[]) { int data[] = {1, 2, 3, 7}; if (!findNextPermutation(data)) System.out.println("There is no higher" + " order permutation " + "for the given data."); else { System.out.println(Arrays.toString(data)); } } }
Output :
[1, 2, 7, 3]
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Login/Signup to comment