Challenge: Word Shuffles
Print every arrangement of the letters of a word (all letters different), one per line, in alphabetical order, then count: k. Use backtracking – sort the letters first so the arrangements come out in order.
Input
One word of 1 to 6 different letters.
Output
Every arrangement, then count: k.
Example
Input
cab
Output
abc acb bac bca cab cba count: 6
Hints
Sort the letters, then try them in order at each position.
Use a boolean[] used to skip letters already placed, and undo after the recursive call.
Solution explanation
There are n! arrangements (6 for 3 letters, 720 for 6), so the work is O(n! · n). Because we try letters in sorted order, the output is alphabetical with no extra sorting.
Show solution
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static char[] letters;
static boolean[] used;
static StringBuilder out = new StringBuilder();
static int count = 0;
static void arrange(StringBuilder current) {
if (current.length() == letters.length) {
out.append(current).append('\n');
count++;
return;
}
for (int i = 0; i < letters.length; i++) {
if (used[i]) continue;
used[i] = true;
current.append(letters[i]);
arrange(current);
current.deleteCharAt(current.length() - 1);
used[i] = false;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
letters = sc.next().toCharArray();
Arrays.sort(letters);
used = new boolean[letters.length];
arrange(new StringBuilder());
out.append("count: ").append(count);
System.out.println(out);
}
}You can practice without logging in. Log in to save completion.
Save your progress
You're practising as a guest, so your progress won't be saved.
- Track every lab you complete
- Earn verifiable lab certificates
- See your progress in every module