fork download
  1. import java.util.Arrays;
  2.  
  3. class Ideone {
  4.  
  5. public static void main(String[] args) {
  6. dfs(new String[4], new Arr1(new String[]{"A", "B", "C", "D"}));
  7. }
  8.  
  9. static <T> void dfs(T[] val, Arr<T> arr) {
  10. if (arr.size() == 0) {
  11. System.out.println(Arrays.toString(val));
  12. }
  13. for (int i = 0; i < arr.size(); i++) {
  14. val[arr.size()-1] = arr.get(i);
  15. dfs(val, new Arr2<T>(arr, i));
  16. }
  17. }
  18. }
  19.  
  20. interface Arr<T> {
  21. T get(int i);
  22. int size();
  23. }
  24.  
  25. class Arr1<T> implements Arr<T> {
  26. final T[] arr;
  27. Arr1(T[] arr) { this.arr = arr; }
  28. public T get(int i) { return arr[i]; }
  29. public int size() { return arr.length; }
  30. }
  31.  
  32. class Arr2<T> implements Arr<T> {
  33. final Arr<T> arr;
  34. final int omit, length;
  35. Arr2(Arr<T> arr, int omit) { this.arr = arr; this.omit = omit; length = arr.size()-1; }
  36. public T get(int i) { return i < omit ? arr.get(i) : arr.get(i + 1); }
  37. public int size() { return length; }
  38. }
  39.  
  40.  
Success #stdin #stdout 0.07s 32364KB
stdin
Standard input is empty
stdout
[D, C, B, A]
[C, D, B, A]
[D, B, C, A]
[B, D, C, A]
[C, B, D, A]
[B, C, D, A]
[D, C, A, B]
[C, D, A, B]
[D, A, C, B]
[A, D, C, B]
[C, A, D, B]
[A, C, D, B]
[D, B, A, C]
[B, D, A, C]
[D, A, B, C]
[A, D, B, C]
[B, A, D, C]
[A, B, D, C]
[C, B, A, D]
[B, C, A, D]
[C, A, B, D]
[A, C, B, D]
[B, A, C, D]
[A, B, C, D]