当前位置: 首页 > article >正文

LeetCode 0292.Nim 游戏:脑筋急转弯

【LetMeFly】292.Nim 游戏:脑筋急转弯

力扣题目链接:https://leetcode.cn/problems/nim-game/

你和你的朋友,两个人一起玩 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

方法一:脑筋急转弯(看能否整除4)

这种题可以模拟几个试试。当轮到我时:

  • 1、2、3必胜
  • 4必输(不论拿多少个剩下的必定是1、2、3,下一个人必胜)
  • 5、6、7必胜(5、6、7都有办法在一次拿石子后剩下4个,下一个人必输)
  • 8必输(不论拿多少个剩下的必定是5、6、7,下一个人必胜)

相信聪明的你一定已经发现规律了。轮到自己时, 4 4 4的倍数必输,否则必胜。

由于自己是先手,就看初始数量是否为 4 4 4的倍数,若是则必输,否则就一次操作将剩下的石子数量变成 4 4 4的倍数。

  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:
    bool canWinNim(int n) {
        return n % 4;
    }
};
Python
class Solution:
    def canWinNim(self, n: int) -> bool:
        return n % 4 != 0  # 注意这里不能像C一样只return一个n%4

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136024724


http://www.kler.cn/a/229811.html

相关文章:

  • 了解模2除法:原理与应用
  • 面试:C++类成员初始化顺序
  • Erlang语言的网络编程
  • Kivy,跨平台UI的艺术家
  • 运行vue项目,显示“npm”无法识别为 cmdlet、函数、脚本文件或可操作程序的名称
  • git的rebase和merge的区别?
  • 【经典例子】Java实现2048小游戏(附带源码)
  • 【自然语言处理-工具篇】spaCy<1>--介绍及安装指南
  • 8个国外顶尖设计网站,设计师必备!
  • re:从0开始的CSS学习之路 2. 选择器超长大合集
  • Java锁到底是个什么东西
  • 92.网游逆向分析与插件开发-游戏窗口化助手-显示游戏数据到小助手UI
  • 12. onnx转为rknn测试时有很多重叠框的修改(python)
  • Bug地狱 #1 突然宕机,企业级应用到底怎么了
  • Android 无操作之后定时退出
  • 代码随想录算法训练营第二八天 | 分割 子集
  • Python 调用 OpenAI ChatGPT API
  • leetcode-top100链表专题二
  • Django通过Json配置文件分配多个定时任务
  • 比较两次从接口获取的数据,并找出变动的字段
  • 071:vue中过滤器filters的使用方法(图文示例)
  • Z函数的原理和应用:以Python为例
  • 微信自动预约小程序开发指南:从小白到专家
  • HiSilicon352 android9.0 开机视频调试分析
  • Micro micro controller一览
  • window 安装 jenkins 编写脚本