fork download
  1. import java.util.*;
  2. import java.util.stream.*;
  3. class IntPermutation implements Iterable<int[]> {
  4. private final int[] a;
  5. public IntPermutation(int[] a) {
  6. this.a = a;
  7. }
  8. public Iterator<int[]> iterator() {
  9. return a == null ? Collections.emptyIterator() : new Iterator<int[]>() {
  10. private int[] a = IntPermutation.this.a.clone();
  11. public boolean hasNext() {return a != null;}
  12. public int[] next() {
  13. if (!hasNext()) throw new NoSuchElementException();
  14. int[] b = a.clone();
  15. a = next_or_null(a);
  16. return b;
  17. }
  18. };
  19. }
  20. public Stream<int[]> stream() {
  21. return StreamSupport.stream(spliterator(), false);
  22. }
  23. private static int[] swap(int i, int j, int[] a) {
  24. int t = a[i];a[i] = a[j];a[j] = t;
  25. return a;
  26. }
  27. private static int[] rev(int b, int e, int[] a) {
  28. for (e--; b < e; b++, e--) a = swap(b, e, a);
  29. return a;
  30. }
  31. private static int[] next_or_null(int[] a) {
  32. int e = a.length;
  33. for (int i = e - 2, j = e - 1; 0 <= i; i--, j--)
  34. if (a[i] < a[j])
  35. for (int k = e - 1; i < k; k--)
  36. if (a[i] < a[k])
  37. return rev(j, e, swap(i, k, a));
  38. return null;
  39. }
  40. }
  41. class Ideone {
  42. private static int[] f(int[] a, int n) {
  43. var it = new IntPermutation(a).iterator();
  44. for (int i = 1; i <= n && it.hasNext(); i++) {
  45. var b = it.next();
  46. if (i == n) return b;
  47. }
  48. return null;
  49. }
  50. public static void main(String[] args) {
  51. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 1)));
  52. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 2)));
  53. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 3)));
  54. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 123456)));
  55. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 234567)));
  56. System.out.println(Arrays.toString(f(new int[] {1,2,3,4,5,6,7,8,9}, 362880)));
  57. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 1)));
  58. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 2)));
  59. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 3)));
  60. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 123456)));
  61. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 234567)));
  62. System.out.println(Arrays.toString(f(new int[] {1,1,1,2,2,2,3,3,3,4,4,4}, 369600)));
  63. }
  64. }
  65.  
Success #stdin #stdout 0.18s 121412KB
stdin
Standard input is empty
stdout
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 9, 8]
[1, 2, 3, 4, 5, 6, 8, 7, 9]
[4, 1, 6, 5, 8, 9, 7, 3, 2]
[6, 8, 4, 7, 5, 3, 2, 1, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4]
[2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4]
[3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2]
[4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]