public class PermutationsAndCombinations {
// Swap two characters in an array
static void swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// Print array of chars
static void printArray(char[] arr, int size) {
for (int i = 0; i < size; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// Recursive function to generate permutations
static void permute(char[] arr, int l, int r) {
if (l == r) {
printArray(arr, r + 1);
return;
}
for (int i = l; i <= r; i++) {
swap(arr, l, i);
permute(arr, l + 1, r);
swap(arr, l, i); // backtrack
}
}
// Generate all combinations using bitmask
static void generateCombinations(char[] arr, int size) {
for (int mask = 1; mask < (1 << size); mask++) {
for (int i = 0; i < size; i++) {
if ((mask & (1 << i)) != 0) {
System.out.print(arr[i] + " ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
char[] input = {'a', 'b', 'c'};
int size = input.length;
System.out.println("All permutations:");
permute(input, 0, size - 1);
System.out.println("\nAll combinations:");
generateCombinations(input, size);
}
}
/*
run:
All permutations:
a b c
a c b
b a c
b c a
c b a
c a b
All combinations:
a
b
a b
c
a c
b c
a b c
*/