fork(1) download
  1. /** www.techiedelight.com/find-permutations-given-string/ */
  2. class AllStringPermutations {
  3.  
  4. public static void main(String[] args) {
  5. String s = "ABC";
  6.  
  7. findAndPrintPermutations("", s, s.length());
  8.  
  9. System.out.println();
  10. char[] c = {'A', 'B', 'C'};
  11. findAndPrintPermutationsCharArrayAlternative(c, 0);
  12. }
  13.  
  14. private static void findAndPrintPermutations(String candidate, String remaining, int counter) {
  15. if (counter == 0) {
  16. System.out.println(candidate);
  17. return;
  18. }
  19.  
  20. // Given that in Java Strings are immutable this is not really backtracking but
  21. // the principle is similar.
  22. // For a similar solution to C++ check findAndPrintPermutationsCharArrayAlternative
  23. // which uses a char []
  24. for (int i = 0; i < remaining.length(); i++) {
  25. String newCandidate = candidate + remaining.charAt(i);
  26. String newRemaining =
  27. remaining.substring(0, i) + remaining.substring(i + 1, remaining.length());
  28.  
  29. findAndPrintPermutations(newCandidate, newRemaining, counter - 1);
  30. }
  31. }
  32.  
  33. private static void findAndPrintPermutationsCharArrayAlternative(char[] c, int currentIndex) {
  34. if (currentIndex == c.length - 1) {
  35. for (int i = 0; i < c.length; i++) {
  36. System.out.print(c[i]);
  37. }
  38. System.out.println();
  39. return;
  40. }
  41.  
  42. for (int i = currentIndex; i < c.length; i++) {
  43. swap(c, currentIndex, i);
  44. findAndPrintPermutationsCharArrayAlternative(c, currentIndex + 1);
  45. swap(c, currentIndex, i);
  46. }
  47. }
  48.  
  49. private static void swap(char[] c, int x, int y) {
  50. char temp = c[x];
  51. c[x] = c[y];
  52. c[y] = temp;
  53. }
  54. }
Success #stdin #stdout 0.04s 4386816KB
stdin
Standard input is empty
stdout
ABC
ACB
BAC
BCA
CAB
CBA

ABC
ACB
BAC
BCA
CBA
CAB