1
+
2
+ // let permutation = [];
3
+ // const permutate = (arr) => {
4
+ // for (let i = 0; i < arr.length - 1; i++) {
5
+ // let current = arr[i];
6
+
7
+ // let next = arr[i + 1]
8
+ // arr[i] = next;
9
+ // arr[i + 1] = current;
10
+ // permutation.push(arr.map(x=>x));
11
+ // arr[i + 1] = next;
12
+ // arr[i] = current;
13
+
14
+ // }
15
+ // }
16
+
17
+ // let arr = [1, 2, 3]
18
+ // permutate(arr)
19
+ // console.log(permutation);
20
+
21
+
22
+ let permArr = [ ] ,
23
+ usedChars = [ ] ;
24
+ function permute ( input , diff ) {
25
+ var i , ch ;
26
+ for ( i = 0 ; i < input . length ; i ++ ) {
27
+ // fixed 1, then process [2,3]
28
+ ch = input . splice ( i , 1 ) [ 0 ] ;
29
+ // usedchars [1]
30
+ usedChars . push ( ch ) ;
31
+ if ( input . length == 0 ) {
32
+ let bool = true ;
33
+ for ( let k = 0 ; k < usedChars . length ; k ++ ) {
34
+ if ( Math . abs ( ( usedChars [ k ] - ( k + 1 ) ) ) !== diff ) {
35
+ bool = false ;
36
+ break ;
37
+ }
38
+ }
39
+ // console.log(usedChars);
40
+ if ( bool ) {
41
+ return usedChars ;
42
+ }
43
+ }
44
+ // processing [2,3]
45
+ let res = permute ( input , diff )
46
+ if ( res . length > 0 ) {
47
+ return res ;
48
+ }
49
+
50
+ input . splice ( i , 0 , ch ) ;
51
+ usedChars . pop ( ) ;
52
+ }
53
+ return [ ] ;
54
+ } ;
55
+
56
+ function validate ( arr , diff ) {
57
+ for ( let k = 0 ; k < arr . length ; k ++ ) {
58
+ let index = k + 1 ;
59
+ let ithElement = arr [ k ] ;
60
+ if ( Math . abs ( index - ithElement ) !== diff ) {
61
+ return [ ] ;
62
+ }
63
+ }
64
+ return arr ;
65
+ }
66
+
67
+ function permute2 ( permutation , diff ) {
68
+ let length = permutation . length ,
69
+ c = new Array ( length ) . fill ( 0 ) ,
70
+ i = 1 , k , p ;
71
+ let arr = permutation . slice ( ) ;
72
+ if ( validate ( arr , diff ) . length > 0 )
73
+ return arr ;
74
+
75
+ while ( i < length ) {
76
+ if ( c [ i ] < i ) {
77
+ k = i % 2 && c [ i ] ;
78
+ p = permutation [ i ] ;
79
+ permutation [ i ] = permutation [ k ] ;
80
+ permutation [ k ] = p ;
81
+ ++ c [ i ] ;
82
+ i = 1 ;
83
+ arr = permutation . slice ( ) ;
84
+ if ( validate ( arr , diff ) . length > 0 )
85
+ return arr ;
86
+
87
+ } else {
88
+ c [ i ] = 0 ;
89
+ ++ i ;
90
+ }
91
+ }
92
+ return [ ] ;
93
+ }
94
+ n = 10 ;
95
+ k = 5 ;
96
+
97
+ let numbers = Array . from ( Array ( n ) , ( _ , i ) => i + 1 ) ;
98
+
99
+ console . log ( ( permute2 ( numbers , k ) ) ) ;
0 commit comments