LeetCode-292-Nim游戏


题意描述:

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

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。


示例:

输入: 4
输出: false 
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;
     因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

解题思路:

Alice: 这是什么意思呀 ? 什么

你们是聪明人,每一步都是最优解。

Bob: 哈哈哈, 这是一道博弈论的题目,属于 ACM 竞赛中常见的一类题型,在博弈论的题目里面经常会给出这样的条件。
Alice: 所以要怎么做呢 ?
Bob: 我也不知道,先分析一下吧。
Alice: 那就按照找规律来做吧。假设 A 是先手, 如果 A 能赢得游戏就返回 true,否则就返回 false

石头数目A赢得比赛 ?策略说明
1trueA 直接拿 1 个
2trueA 直接拿 2 个
3trueA 直接拿 3 个
4falseA 无论先拿几个,剩下的都会被B 全部拿走,A 必输
5trueA 拿走 1 个,剩下4 个 从B 开始,B 必输 , A 必赢
6trueA 拿走 2 个,剩下4 个 从B 开始,B 必输 , A 必赢
7trueA 拿走 3 个,剩下4 个 从B 开始,B 必输 , A 必赢
8falseA 拿走 1或者2或者3 个,剩下7或者6或者5个 都会被B拿的只剩4个,A 必输

Bob: 我明白了,只要谁在 游戏的过程中 面临着 有4个石子的情况,他就输了。
Alice: 对,而且两个人都是聪明人,每一步都是最优解,所以在游戏开始之前就能确定是谁输谁赢了。只要是 n % 4 != 0 的时候都是先手赢,否则就是后手赢。
Bob: 😉😉果然还会先下手为强呀。


代码:

Python 方法一:

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

Java 方法一:

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

易错点:

  • 很明显,一堆石头至少得有一个石头,所以 0 % 4 == 0 并不构成一个边界值输入,也就是说没有 输入是 0 的坑。

总结:

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问。 4. 查找特殊字符:如果乱码问只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值