逆推手牌
扑克牌发一张并把当前的放到堆底,通过牌桌上牌出现的顺序逆推手牌原始顺序。从最后发的牌N-1开始,倒退的上一步是N-1被放置堆底,手牌里还是只有N-1;再上一步是发N-2,倒退这步就是把N-2放到N-1前面;再上一步是置堆底,逆推回原状态也就是把N-1放到N-2前,依此类推每次是插入到首元素,然后把尾元素置顶。如此直到第一个元素0,它没有经历过置底过程,直接break。
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> rollback(vector<int> &nums) {
deque<int> res;
for (int i = nums.size() - 1; i >= 0; --i) {
res.push_front(nums[i]);
if (i == 0) break;
const auto b = res.back();
res.pop_back();
res.push_front(b);
}
return vector<int>(res.begin(), res.end());
}
};
int main() {
vector<int> nums = {1, 3, 5, 4, 2};
Solution sol;
for (const auto i : sol.rollback(nums)) cout << i << ", ";
}
Last updated
Was this helpful?