有十张扑克牌,从上面开始抽,抽出一张放桌子上,然后再抽出一张放扑克牌的最下面,
这样循环往复的操作,直到手里的牌都没有了。这时,桌子上牌的顺序正好是
1 2 3 4 5 6 7 8 9 10。要求写代码求出原顺序。
解法:逆向恢复法
/**
* @param arr 原顺序数组
*/
public static void solution(int[] arr) {
if (arr.length < 0) {
return;
}
// 初始数据到队列
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 0; i < arr.length; i++) {
queue.addLast(arr[i]);
}
System.out.println("原顺序:" + queue);
// 模拟抽取操作
LinkedList<Integer> res = new LinkedList<>();
while (!queue.isEmpty()) {
res.addLast(queue.removeFirst());
if (!queue.isEmpty()) {
queue.addLast(queue.removeFirst());
}
}
System.out.println("抽取后顺序:" + res);
LinkedList<Integer> list = new LinkedList<>();
list.add(res.removeLast());
while (!res.isEmpty()){
list.addFirst(list.removeLast());
list.addFirst(res.removeLast());
}
System.out.println("还原顺序:" + list);
}