【普通人题解】LeetCode 纸牌游戏

本文介绍了一种通过已知纸牌被抽取后的顺序来还原原始纸牌堆顺序的方法。提出了两种解法:一是通过模拟过程逐一匹配;二是直接逆序操作还原。这两种方法简单高效,适用于快速解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

给定纸牌堆,小明每次抽两张牌顺序压到牌堆最下面,此时翻看牌堆最上面的牌,并拿出牌堆。
重复此操作,小明能得到n个牌的数字。

假设已知小明看到的牌的顺序,求纸牌堆的原顺序。

输入:n,和n个数字,代表小明看到的牌顺序。
输出:纸牌原顺序。

示例:
4
1 2 3 4
输出
4 2 1 3

解法一:模拟

如果把未知的牌设成变量a、b、c、d,程序模拟翻看牌的时候,就能一一映射,模拟到最后能够得到答案。

解法二:倒序

既然已经给了正序的结果,那我原封不动按照逆序的操作还原这堆牌,就可以得到原来的牌了。
倒序如何对应呢?
从上方拿两张牌顺序压在下面:从下方拿两张牌顺序放回上面
打开最上面的牌记录并拿出:在牌顶放入一张牌

# n = map(int, input().strip().split())
# seq =[int(num) for num in   input().strip().split()]
n = 4
seq =[1, 2, 3]
from queue import Queue

q=Queue()
for s in seq[::-1]:
    q.put(s)
    q.put(q.get())
    q.put(q.get())

right=[]
while not q.empty():
    right.append(q.get())
    # print(q.get())
for r in right[::-1]:
    print(r,end=' ')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值