public static void print(String str) { if (str == null || str.length() == 0) { return; } StringBuilder sb = new StringBuilder(); boolean[] added = new boolean[str.length()]; print(str, 0, sb, added); }
private static void print(String str, int firstNotAdded, StringBuilder sb, boolean[] added) { if (sb.length() == str.length()) { System.out.println(sb.toString()); return; } for (int j = firstNotAdded; j < str.length(); ++j) { if (!added[j]) { sb.append(str.charAt(j)); added[j] = true; print(str, (j == firstNotAdded ? j + 1 : firstNotAdded), sb, added); sb.setLength(sb.length() - 1); added[j] = false; } } }