这是面试的时候碰到的问题
由于当时没有进入算法的状态
实现的不是特别的优雅
就是手上有一堆牌
先取顶上一张放到桌上
再取顶上一张放到这堆牌的底部
以此类推
给了你最后桌上的序列
求你原来手上牌的序列
很快就可以分析出来
“
先取顶上一张放到桌上
再取顶上一张放到这堆牌的底部
”
可以转化为
“隔一张
放一张到桌上
再对剩下的牌做同样的操作”
我当时发现逆序是真TM的难求
所以用一个HashMap存了index
然后对index操作
最后还原
这样不太好
先从正序思考一遍
所以如果我们想逆序
需要从牌的数目
确定我们逆序的情况
比如这里是6
毫无疑问第一轮下来剩下3个
第二轮剩下1个
这样分析就明朗了
只要确定每次操作
牌的数目有几张
就可以快速解决了
数目的话
再类推下
比如11:11、5、2、1
就是n/2
所以我们需要一个数组把每次的操作的牌数存下来
对应这个例子就是
11 5 2 1
那如果我们假设桌上的牌的序列是x1(最后的)到x11