题目描述

你和你的朋友,两人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉1-3块石头,你作为先手,拿掉最后一块石头的人获胜。你们是聪明人,每一步都是最优解。编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。
Try it on Leetcode

输入示例

Input  : 4
Output : false

如果堆中有4块石头,那么你永远不会赢得游戏,因为最后一块石头总是会被你的朋友拿走

巴什博弈(Bash Game)

根据 巴什博奕,若有:

n % (m + 1) != 0

则可知先手必胜

Java 实现

class Solution {
    public boolean canWinNim(int n) {
        // Bash Game - n % (m + 1) != 0. First will win.
        return n % 4 != 0;
    }
}

参考文章

  1. 292. Nim Game | Leetcode
  2. Leetcode 292. Nim 游戏 | 苏易北