文章目录

  • 题目描述
  • 题目难度——简单
  • 方法一:脑筋急转弯
    • 代码/C++/Python
  • 总结

题目描述

你和你的朋友,两个人一起玩 Nim 游戏:

桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回
false 。

示例 1:

输入:n = 4 输出:false 解释:以下是可能的结果:

  1. 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
  2. 移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。
    3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。 在所有结果中,你的朋友是赢家。

示例 2:
输入:n = 1 输出:true
示例 3:

输入:n = 2 输出:true

提示:

1 <= n <= 231 - 1

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/nim-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目难度——简单

方法一:脑筋急转弯

  乍一看这个题目好像很难,要考虑很多种情况,我先手,对方后手,每次可以拿1-3颗,那在石头充足的情况下每一轮拿取就有3×3=9种情况,要在这9种情况下判断谁谁输谁赢,看起来确实很复杂。
  但是!我知道你很急,但你先别急,题目已经给提示了,在n=4的时候,我们怎么样都是必输,那n=4必输,n=8呢,n=12呢,n=。。。呢?可以发现,只要是4的整数倍,我们最后还是会回到n=4的情况,所以只要是4的整数倍,我们必输。再看看不是4的情况,小于4自不必多说,肯定是我们赢,大于4的话,比如5,我们可以先手拿1个,形式就变成了了对手先手情况下只有4个石头。n=6,我们先手拿两个,n再大,我们也可以经过多轮的拿取,最后到拿了x个之后让对方面临只剩4个的情况。所以,这道题我们就只用判断n是不是4的整数倍即可。

代码/C++/Python

class Solution {public:bool canWinNim(int n) {return n % 4 != 0;}
};

class Solution:def canWinNim(self, n: int) -> bool:return n % 4 != 0

总结

  这道题乍一看好像挺难,但其实是个脑筋急转弯。只有一行求余运算的代码,所以时间复杂度是O(1),空间也只有O(1)。

LeetCode题目笔记——292. Nim 游戏 (脑筋急转弯C++/Python)相关推荐

  1. Java实现 LeetCode 292 Nim游戏

    292. Nim 游戏 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解 ...

  2. 【LeetCode击败99%+】Nim 游戏

    题目 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头. 你们轮流进行自己的回合,你作为先手. 每一回合,轮到的人拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者. 假设你们每一 ...

  3. leetcode刷题:292. Nim 游戏(Java)

    题目描述 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...

  4. 力扣(LeetCode)292. Nim游戏 巴什博奕

    你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函数,来判断你 ...

  5. 文巾解题 292. Nim 游戏

    1 题目描述 2 解题思路 这其实是一个脑筋急转弯一样的题目.先给出结论吧:如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利. 下面是推导部分: 让我们考虑一些小例子. ...

  6. 292. Nim 游戏(简单题)

    题目描述: 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个 ...

  7. java nim游戏_LeetCode 292. Nim游戏

    题目描述: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...

  8. 【学习笔记】NIM游戏与SG函数初探

    公平组合游戏ICG 游戏条件介绍: 由两名玩家交替行动 游戏进程的任意时刻,可以执行的合法行动与轮到的玩家无关 若当前玩家无法行动,则判负 则称该组合游戏为公平组合游戏.如NIM游戏等即是经典的公平组 ...

  9. leetcode 292. Nim Game | 292. Nim 游戏(DP->数学推理)

    题目 https://leetcode-cn.com/problems/nim-game/ 题解 本题实际上是一个需要分析的数学题.如果第一时间没有发现规律的话,可以尝试先用递归法,暴力输出前几个,观 ...

最新文章

  1. html默认选定,html默认代码
  2. QT信号与槽——观察者模式——回调函数
  3. Mac系统的JDK8默认安装路径
  4. 使用JMX监控Kafka
  5. python中的代码复用与函数递归
  6. Windows中获取Redis指定前缀的Key并删除掉
  7. Vue进行格式化时间Y-m-d h:m:s
  8. php 地图 距离,PHP计算百度地图两个GPS坐标之间距离的方法
  9. windows10环境下载labelImg及使用方法
  10. fastdfs原理_搭建分布式文件系统FastDFS集群
  11. Java邮件发送:带附件 or 不带附件 is nothing
  12. Flash制作(简单)电子相册
  13. 用3DMAX制作《滚动的小球》
  14. 10大改变世界的未来科技
  15. Docker Desktop 错误:必须在BIOS中启用 硬件辅助虚拟化和数据执行保护
  16. Qt实现一个简单的编译器(软件生成器)
  17. 粉丝福利!Matlab自动配色神器ColorForFans
  18. 2021年真无线蓝牙耳机排名:人气排名前十的蓝牙耳机推荐
  19. uniapp抽奖组件-动画效果之各类抽奖(跳跃)
  20. Swift 语法初探(1):Swift 与 Java 的小比较

热门文章

  1. ECharts之横向柱状图二
  2. C语言|博客作业10
  3. 微信怎么防封几率大_域名被墙有哪些处理方法?域名被微信封了该怎么解决?
  4. oracle utl_http.request,通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求
  5. Matlab中矩阵的右上角有一撇表示什么意思
  6. 全民一起玩Python提高篇第十二课:面向对象基本原理与语法(三)
  7. 解决JETBRAINS官网打不开
  8. for key in file_keys
  9. 手眼标定,9点标定过程及其运算
  10. NETDMIS5.0手动测量——智能识别2023