390. 消除游戏
问题链接
https://leetcode.cn/problems/elimination-game/
解题思路
这题需要推理,和约瑟夫环一样。我暂时不想去深入研究,只想用模拟。
这题其实可以用递归来解,因为他每一层的处理方式几乎一模一样。
我们首先看参数和返回值。我们期望接收到一个数组和一个flag,返回最后剩下的值。
这个数组代表了我们模拟的数组,flag代表了我们是从做往右处理还是从右往左处理。
然后我们设计本层做什么以及缩小规模。
本层应该根据flag,按照题目中提到的规律,删除掉该删除的元素。
然后将处理好的数组传到下一层递归继续进行处理。
最后我们看递归的退出条件。
显然,最后剩下一个,那就该退出了,这就是结果。
代码
class Solution: def lastRemaining(self, n: int) -> int: def dfs(li, flag): if len(li) == 1: return li[0] nxt = [] if flag: for i in range(len(li)): if i % 2 == 1: nxt.append(li[i]) else: for i in range(len(li[::-1])): if i % 2 == 1: nxt.append(li[i]) nxt = nxt[::-1] return dfs(nxt, not flag) return dfs([i for i in range(1, n+1)], True)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)