我在此实现中使用Steinhaus Johnson-Trotter算法:https://github.com/nodash/steinhaus-johnson-trotter
我想知道如何使功能类似“先前的”置换。
示例:
const t = trotter([4, 2, 1, 3])
t.next() // [ 4, 2, 3, 1 ]
t.back() // [4, 2, 1, 3] <- this is what I need
我正在尝试找到任何可能的方式来实现反向功能但没有结果。
编辑:我已经尝试过更改:moveTo = maxIndex - directions[maxIndex];
但是它不适用于所有情况,请看一下:
const numbers = [4, 2, 1, 3];
const t = trotter(numbers); // [4, 2, 1, 3] | [ 0, 1, 2, 3 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 2, 3, 1 ] | [ 0, 1, 3, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 4, 3, 2, 1 ] | [ 0, 3, 1, 2 ] [ 0, -1, -1, -1 ]
t.next(); // [ 3, 4, 2, 1 ] | [ 3, 0, 1, 2 ] [ 0, 0, -1, -1 ]
t.prev(); // it should be [4, 3, 2, 1] but the output is [3, 4, 2, undefined ]
最佳,
似乎唯一需要的更改:
moveTo = maxIndex + directions[maxIndex];
to
moveTo = maxIndex - directions[maxIndex];