LeetCode——1025.除数博弈

除数博弈

  • 题目
  • 思路
  • 代码
  • 结果
  • 题解的证明

题目

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:

选出任一 x,满足 0 < x < N 且 N % x == 0 。
用 N - x 替换黑板上的数字 N 。
如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。

思路

一开始,是没有什么思路的。试着用数取推出规律。
当N=1时,因为(0,1)里面没有1的因子,所以爱丽丝输了;

当N=2的时候,在(0,2)我们只可以选取一个1,这个时候N-1=1,所以N会变为1,这时没法操作,爱丽丝赢了;

当N=3的时候,(0,3)里面,只有1可以挑选,这个时候N-1=2,所以爱丽丝会输;

当N=4的时候,(0,4),我们挑选一个1或者2,挑选1的话,N=3,相当于对方在N=3的时候先手,所以对方输,爱丽丝赢了;当挑2的时候,剩下的是2,所以相当于对方在2的时候先手,会赢。但是,题目要求是最优策略进行,所以,爱丽丝还是会赢!
大胆猜测一波,N为偶数,爱丽丝赢,N为奇数,爱丽丝输

代码

class Solution {
     
    public boolean divisorGame(int N) {
     
        return N%2==0;
    }
}

结果

LeetCode——1025.除数博弈_第1张图片
猜对了

题解的证明

LeetCode——1025.除数博弈_第2张图片

你可能感兴趣的:(LeetCode)