| 37 | |
| 38 | public static int[] fact = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600}; |
| 39 | public static void set8Perm(int[] arr, int len, int idx) { |
| 40 | int val = 0x76543210; |
| 41 | for (int i = 0; i < len - 1; i++) { |
| 42 | int p = fact[len - 1 - i]; |
| 43 | int v = idx / p; |
| 44 | idx -= v * p; |
| 45 | v <<= 2; |
| 46 | arr[i] = (val >> v) & 0x7; |
| 47 | int m = (1 << v) - 1; |
| 48 | val = (val & m) + ((val >> 4) & ~m); |
| 49 | } |
| 50 | arr[len - 1] = val & 0x7; |
| 51 | } |
| 52 | |
| 53 | public static int get8Perm(int[] arr, int len) { |
| 54 | int idx = 0; |