java inbuilt permutation function code example
Example 1: java next permutation
public static boolean next_permutation(int[] arr) {
int len = arr.length;
int i = len - 1;
// 1. find largest i where arr[i - 1] < arr[i]
while (i > 0) {
if (arr[i - 1] < arr[i]) break;
i--;
}
if (i <= 0) return false;
// 2. find largest j where arr[i - 1] < arr[j] and j >= i
int j = len - 1;
while (j >= i) {
if (arr[i - 1] < arr[j]) break;
j--;
}
// 3. swap elements between arr[i-1] and arr[j]
swap(i - 1, j, arr);
// 4. reverse elements from i to end of array
len--;
while (i < len) {
swap(i, len, arr);
len--;
i++;
}
return true;
}
public static void swap(int x, int y, int[] arr) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
Example 2: generate all permutations of string
void perm(char a[], int level){
static int flag[10] = {0};
static char res[10];
// If we are the last character of the input string
if(a[level] == '\0'){
// First we assign stopping point to result
res[level] = '\0';
// Now we print everything
for(int i = 0; res[i] != '\0'; ++i){
printf("%c", res[i]);
}
printf("\n");
++counter;
}
else{
// Scan the original string and flag to see what letters are available
for(int i = 0; a[i] != '\0'; ++i){
if(flag[i] == 0){
res[level] = a[i];
flag[i] = 1;
perm(a, level + 1);
flag[i] = 0;
}
}
}
}
int main(){
char first[] = "abc";
perm(first, 0);
return 0;
}